linux下php源码安装(nginx服务器篇)

安装PHP依赖:
# sudo -s

# LANG=C

# yum -y install gcc automake autoconflibtool make

# yum -y install gccgcc-c++glibc

# yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

yum install -y libpng*  
yum install -y libjpeg*
yum install -y libXpm*
yum install -y freetype*
yum install -y zlib*

安装PHP

# wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
# ./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt \
--enable-mbstring  --with-curl  --with-mysql --with-mysqli --enable-pdo=shared    --with-pdo-mysql=shared, /usr/local/mysql     \
--enable-inline-optimization --with-bz2   --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex\
--with-gd  --enable-gd-native-ttf --with-png-dir=/usr/lib64/ --with-zlib-dir=/lib64/ --with-ttf  \
--with-jpeg-dir=/usr/lib64/ --with-freetype-dir=/usr/lib64/ --with-xpm-dir=/usr/lib64/    \
 
   
# make

# make install


 
   
php配置文件(php解压包源码目录中进行复制)

# cp php.ini-development /usr/local/php/lib/php.ini

打开 php.ini:

vim /usr/local/php/lib/php.ini
修改为如下所示:
cgi.fix_pathinfo=0 date.timezone = Asia/Shanghai mysql.default_socket = /tmp/mysqld.sock pdo_mysql.default_socket= /tmp/mysqld.sock mysqli.default_socket =/tmp/mysqld.sock    注意修改了php配置文件后,php-fpm进程需要重新加载配置文件或者重启一下。  /tmp/mysqld.sock是mysql启动后的sock文件路径.

 
如果www用户不存在,创建www用户。
[root@iZ286pkhut4Z src]# groupadd www
[root@iZ286pkhut4Z src]# useradd -g www www


创建php-fpm配置文件(php-fpm是fastcgi主进程,可以启动和管理多个php-cgi子进程)
(fastcgi模型是由一个主进程和多个子进程构成,这个主进程进行管理这些子进程)

[root@iZ286pkhut4Z src]# cd / usr / local /php
[root@iZ286pkhut4Z php]# cp etc/php-fpm.conf.default etc/php-fpm.conf
[root@iZ286pkhut4Z php]# vi etc/php-fpm.conf
user = www
group = www
listen = 127.0.0.1:9000
 
   
编辑配置文件php-fpm.conf
 
   
 
   
 
   
,只需修改上述三个指令,然后保存。

把php安装目录的权限设置成www用户和用户组

# chmod u+w  /usr/local/php
# chown -R www:www /usr/local/php



php-fpm 如何关闭 重启?
 
   
 
   
 
   
php-fpm 启动:
[root@iZ286pkhut4Z php]# ./sbin/php-fpm
[root@iZ286pkhut4Z php]# ps -ef | grep php-fpm
root     21100     1  0 13:04 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www      21101 21100  0 13:04 ?        00:00:00 php-fpm: pool www
www      21102 21100  0 13:04 ?        00:00:00 php-fpm: pool www
 
   

php-fpm 关闭:

kill -INT   21100

php-fpm 重启:

kill -USR2 21100




php安装完毕,下面是nginx中的fast-cgi配置

--------------------------------------------------------------------------------------------------------------------------------------------




nginx安装方式,自己打开链接看看。

在nginx安装完毕后:


(1) 创建一个供www.domain.com虚拟主机使用的目录:
 
[root@iZ286pkhut4Z src]# mkdir -p /data0/htdocs/www
[root@iZ286pkhut4Z src]# chmod +w /data0/htdocs/www
[root@iZ286pkhut4Z src]# chown -R www:www /data0/htdocs/www

(2)在/data0/htdocs/www目录下安装thinkphp3.2.2框架

#cd /data0/htdocs/www
# wget https://github.com/liu21st/thinkphp/archive/master.zip
解压缩thinkphp3.2.2
# unzip thinkphp-master.zip
# cd thinkphp-master
解压文件全部移动到www目录下
# mv *   ../
# cd ..
删除这个空目录
# rm -rf think-master
更改thinkphp框架文件的user为www用户
# chown -R www:www /data0/htdocs/www/*
# ls 
Application  composer.json  index.php  Public  README.md  ThinkPHP

这样就安装好thinkphp框架了.


(3)配置thinkphp的URL模式为1pathinfo模式

# vim /data0/htdocs/www/ThinkPHP/Conf/convention.php
修改URL_MODEL  => 1


(4)nginx配置文件修改

 
   
 
   
 
   
 
   
 
   
 
   
# vim /usr/local/nginx/conf/nginx.conf
 
user   www;
worker_processes  2;
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections  65535;
}

http {
    include       mime.types;
    default_type  application/octet-stream    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;
    sendfile on;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
 
   
 
   
 
   
 
   
   
    keepalive_timeout  65;

    tcp_nopush     on;
    tcp_nodelay on;

    #fastcgi
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;

    #gzip  on;
  server {
        listen 80;
        server_name www.domain.com domain.com;
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
       #   \.php 只处理动态请求,对于静态资源请求由下面的 location匹配和处理
        location ~ \.php {
                root /data0/htdocs/www;
                fastcgi_pass 127.0.0.1:9000;
                #包含nginx服务器传递给fastcgi程序的参数,php中通过$_SERVER['参数名']可获取
                include   fastcgi.conf;
                #定义变量$fastcgi_script_name_new赋值为$fastcgi_script_name变量
                set $path_info "";
                set $fastcgi_script_name_new $fastcgi_script_name;
                #判断url是否是pathinfo形式的,如果是则把这个url分割成两部分,index.php入口文件之后的pathinfo部分存入$path_info变量中,剩下的部分和$document_root根目录定位index.php入口文件在文件系统中的绝对路径 .

              if ($fastcgi_script_name ~*   "^(.+\.php)(/.+)$"  ) {
                        set $fastcgi_script_name_new $1;
                        set $path_info $2;
                }
                   
                        #对fastcgi.conf中的SCRIPT_FILENAME和SCRIPT_NAME fastcgi参数进行重写,目的是指定入口文件在文件系统中的绝对路径给script_filename参数,让fastcgi知道index.php文件位置。
                        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name_new;
                        fastcgi_param   SCRIPT_NAME   $fastcgi_script_name_new;
                        #定义一个新的nginx服务器传递给fastcgi的参数PATH_INFO,thinkphp需要这个入口文件index.php后的pathinfo信息
                        fastcgi_param   PATH_INFO $path_info;
        }
# 用来匹配静态资源,如果不是静态资源就重写,然后重新轮训所有的location块,由上面的location块匹配后动态处理这个请求
        location / {
                root /data0/htdocs/www;
                index index.php index.html index.htm;

                if (!-e  $request_filename){
                        rewrite ^(.*)$ /index.php$1 last;
                }
        }
    }
}
上述就是nginx配置文件 ,

(4)在/data0/htdocs/www目录下加入404.html文件和50x.html文件,因为在nginx.conf配置文件中配置了这两个文件。


(5)启动php-fpm和nginx

# /usr/local/php/sbin/php-fpm
# /usr/local/nginx/sbin/nginx

(6)测试nginx和thinkphp是否搭配好了。

在浏览器中输入 www.domain.com, 会显示如下内容:

:)

欢迎使用 ThinkPHP!


[ 您现在访问的是Home模块的Index控制器 ]


(7) 让thinkphp能够连接数据库



1.  没有安装PDO扩展时,thinkphp需要这个扩展 。

PDO安装错误:configure: error: Cannot find php_pdo_driver.h.

安装pdo_mysql必须先安装pdo模块,先装pdo模块吧

cd  php5.4/ext/pdo/

/usr/local/webserver/php/bin/phpize

./configure --with-php-config=/usr/local/webserver/php/bin/php-config  --enable-pdo=shared

make &&make install

cd php5.4/ext/pdo_mysql/

/usr/local/webserver/php/bin/phpize

./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/data/mysql/bin/mysql_config

make &&make install

编译成功后会看到php安装目录下出现了扩展模块的目录

交以下几行添加至php/lib/php.ini 文件上

extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/"
extension=pdo.so
extension=pdo_mysql.so
2. 重启php-fpm和nginx一下



下面是PHP 加速插件 Zend Opcache安装和配置

------------------------------------------------------------------


以下zend opcache安装和配置转载自:http://www.laogui.com/Zend-Opcache

linux下php源码安装(nginx服务器篇)_第1张图片

 大家知道目前PHP的缓存插件一般有三个: APC、 eAccelerator、 XCache,但未来它们可能都会消失,因为PHP 5.5已经集成 Zend Opcache,功能和前三者相似但又有少许不同,缓存速度据说比它们更快(注意:只是据说,我没测试过)。 
   

这几个PHP加速插件的主要原理都相同,就是把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知,在安装APC等加速器后打开页面的速度明显加快。

Zend Opcache 已经集成在了PHP 5.5里面,编译安装PHP5.5的时候加上--enable-opcache就行了。但也支持低版本的 PHP 5.2.*, 5.3.*, 5.4.*,未来会取消对5.2的支持,下面是我在PHP 5.4下的安装方法:

依次执行下面的命令
wget http://pecl.php.net/get/zendopcache-7.0.2.tgz
tar xzf zendopcache-7.0.2.tgz
cd zendopcache-7.0.2
phpize
如果找不到phpize 的话自己找PHP路径,我的在/usr/local/php/bin/phpize,下面这行也要按你的php.ini路径自行修改
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

如果显示Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 表示安装完成,下面要修改php的配置文件让它生效

在 php.ini 的最后面加入下面几行
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20100525/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

128意思是给它分配128M内存,
重启nginx服务器和php-fpm 管理器, 然后在nginx服务器根目录下新建test.php文件,
文件内容为:
 

在浏览器输入localhost/test.php 可以看到如下画面:


页面的下面可以看到的运行状态
http://www.laogui.com/images/11.jpg

如果嫌这个不直观可以装个PHP文件查看,地址在 https://gist.github.com/ck-on/4959032,把上面的代码保存为一个php文件放到你的网站目录下面打开就可以看到:


命中率100%。

Zend Opcache因为最近才出来,现在还是测试版,相信在未来几年会越来越流行,现在真没多少人用。目前测试来看还比较稳定,我已经在 vbulletin论坛下运行了几天,不过没看出和APC、xcache有啥区别,只是最近我的APC老让apache崩溃(可能是apache和php版本太新的原因),想换个试试,毕竟Zend Opcache和APC都是php官方的,值得信赖。




你可能感兴趣的:(php)