Nginx and PHP-FPM for Ubuntu

1. Install and Start Nginx
(a) use apt-get
[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ su
$ apt-get install nginx
$ update-rc.d nginx defaults
$ /etc/init.d/nginx start

[/codesyntax]
(b) compile from source
[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install libssl-dev libssl0.9.8
$ wget http://nginx.org/download/nginx-0.8.52.tar.gz
$ tar -xzf nginx-0.8.52.tar.gz
$ cd nginx-0.8.52
$ ./configure --prefix=/usr/local/webserber/nginx
$ make
$ sudo make install;
$ sudo /usr/local/webserber/nginx/sbin/nginx

[/codesyntax]

2. PHP Repository and Install php5-fpm (deprecated from php5.3.3)
[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ apt-get install python-software-properties
$ add-apt-repository ppa:brianmercer/php
$ apt-get update
$ apt-get install php5-fpm php5-cli php5-cgi php5-dev

[/codesyntax]

3. Config Nginx
[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ vi /etc/nginx/sites-available/default
server {
    listen 80;
    server_name localhost;
    access_log /var/log/nginx/localhost.access.log;

    location / {
        root /var/www/nginx-default;
        index index.php index.html index.htm;
    }

    ## Images and static content is treated different
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
        access_log off;
        expires 30d;
        root /var/www;
    }

    ## Parse all .php file in the /var/www/nginx-default directory
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    ## Disable viewing .htaccess & .htpassword
    location ~ /\.ht {
        deny all;
    }
}

[/codesyntax]

4. Start PHP-FPM
[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ /etc/init.d/php5-fpm start

[/codesyntax]

Posted in Nginx, PHP, Ubuntu | Tagged , , | Leave a comment

Shell – MySQL Query

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

#!/bin/bash

# configs
host='localhost';
user='kim';
pass='xxxxxx';
database='test_database';

# select from database
query=`mysql -h$host -u$user -p$pass < tmp;
result=`cut -d' ' -f2- tmp`;
rm -f tmp;

# print result
echo $result;

[/codesyntax]

Posted in Linux | Tagged , | Leave a comment

Sending email by crontab and sendmail

1. /home/www/mailq/sendmail.sh

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

#!/bin/bash

user='kim';
subject='hello kim';
content='this is just a test email.';
from='kim@example.com';
to='xqpmjh@gmail.com';

echo $content | formail -I "To: $to" -I "From: $from" -I "MIME-Version:1.0" -I "Content-type:text/html;charset=utf-8" -I "Subject:=?UTF-8?B?`echo $subject | openssl enc -base64`?=" | /usr/sbin/sendmail -oi $email;

[/codesyntax]


2. crontab

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ crontab -u root -e

[/codesyntax]

* * * * * cd /home/www/mailq; source sendmail.sh;

Posted in Linux | Tagged , | Leave a comment

Custom PHP Extension in C

For Linux (Ubuntu Server)


1. Installation

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ sudo apt-get install gcc
$ sudo apt-get install php5-dev

[/codesyntax]


2. PHP Source Package

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ su
$ cd /home/kim
$ wget http://cn.php.net/get/php-5.3.2.tar.gz/from/this/mirror
$ mv mirror php-5.3.2.tar.gz
$ tar -xzf php-5.3.2.tar.gz

[/codesyntax]


3. Create Extension

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ cd php-5.3.2/ext
$ ./ext_skel --extname=ttt
$ cd ttt/
$ vi config.m4

[/codesyntax]

PHP_ARG_WITH(example, for example support,

[ –with-example Include example support])

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ phpize
$ ./configure
$ make
$ sudo make install

[/codesyntax]


4. Config and Restart Apache

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ vi /etc/php5/apache2/conf.d/ttt.ini

[/codesyntax]

extension=ttt.so

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ apache2ctl restart

[/codesyntax]


5. For PHP-FPM

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ vi /etc/php5/fpm/conf.d/ttt.ini

[/codesyntax]

extension=ttt.so

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ /etc/init.d/php5-fpm restart

[/codesyntax]


6. Extension Functions

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ cd php-5.3.2/ext/ttt
$ vi php_ttt.h

[/codesyntax]

PHP_FUNCTION(ttt_hello);

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ vi ttt.c

[/codesyntax]

PHP_FE(ttt_hello, NULL)

PHP_FUNCTION(ttt_hello){ php_printf(“hello !!”); }

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ ./configure
$ make
$ sudo make install
$ apache2ctl restart
$ vi /var/www/index.php

[/codesyntax]

[codesyntax lang=”php”]

if (extension_loaded('ttt')) {
    ttt_hello('my input string');
}

[/codesyntax]




For Windows


1. Installations and Configurations

cygwin (c:\cygwin)
vc6
Apache
PHP (D:\php-5.2.14-Win32)
PHP source (D:\php-5.2.14-source)
Add env path (D:\php-5.2.14-Win32)


2. Create Extension

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ cd D:\php-5.2.14-source\ext
$ php ext_skel_win32.php --extname=test

[/codesyntax]


3. Extension Config

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ notepad ext/test/php_test.h

[/codesyntax]

PHP_FUNCTION(hello);

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ notepad ext/test/test.c

[/codesyntax]

PHP_FE(hello, NULL)

PHP_FUNCTION(hello){ php_printf(“hello !!”); }


4. Build Extension

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ copy D:\php-5.2.14-Win32\dev\php5ts.lib D:\php-5.2.14-source\ext\test\php5ts.lib

[/codesyntax]

vc6 :

Open project -> test.dsp

Build -> Set Active Configuration choose release mode (or remove debug mode)

Build dll -> D:\php-5.2.14-source\Release_TS\php_test.dll

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ copy D:\php-5.2.14-source\Release_TS\php_test.dll D:\php-5.2.14-Win32\ext\php_test.dll

[/codesyntax]


5. Run and Test

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ notepad D:\php-5.2.14-Win32\php.ini

[/codesyntax]

extension_dir=”D:\php-5.2.14-Win32\ext”

extension=php_test.dll

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

$ notepad test.php

[/codesyntax]

<?php hello(); ?>


Restart apache

Posted in PHP, Ubuntu | Tagged , | Leave a comment

Shell – count the keyword

[codesyntax lang=”bash” lines=”no” container=”pre” tab_width=”4″]

#!/bin/bash

# perhaps the field to be analyted is the 2nd field
log=/path/to/log;
keyword=”the keyword”;
cat $log | cut -f2 | grep $keyword | sort | uniq -c -i

[/codesyntax]

Posted in Linux | Tagged | Leave a comment