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

来源:互联网 发布:c 查询网络北京时间 编辑:程序博客网 时间:2024/05/26 08:41
安装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.gztar zvxf php-5.4.7.tar.gzcd 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=0date.timezone = Asia/Shanghaimysql.default_socket = /tmp/mysqld.sockpdo_mysql.default_socket= /tmp/mysqld.sockmysqli.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.confuser = wwwgroup = wwwlisten = 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-fpmroot     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 wwwwww      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

wKioL1Mu8RjAfb_YAAcEqc5kJpU764.jpg

大家知道目前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文件,
文件内容为:
 <?php echo phpinfo();  ?>

在浏览器输入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官方的,值得信赖。




0 0
原创粉丝点击