1、到php官网下载最新的php版本
我下载的是php-5.6.28.tar.bz2
2、编译安装
2.1安装依赖
2.1.1 解决libxml2和xml2-config依赖
configure: error: xml2-config not found. Please check your libxml2 installation
yum install libxml2 yum install libxml2-devel -y
2.1.2 解决libcurl依赖
error: Please reinstall the libcurl distribution
yum install curl curl-devel
2.1.3解决mcrypt依赖
configure: error: mcrypt.h not found. Please reinstall libmcrypt
yum install php-mcrypt libmcrypt libmcrypt-devel
2.1.4解决cannot get uid for user 'www-data'
启动报错:
Starting php-fpm [25-Nov-2016 13:28:27] ERROR: [pool www] cannot get uid for user 'www-data'
解决:
groupadd www-data useradd www-data -g www-data -s /sbin/nologin
-g:指定新用户所属的用户组(group)
-M:不建立根目录
-s:定义其使用的shell,/sbin/nologin代表用户不能登录系统。
2.1.5解决nginx php-fpm.socket Permission denied
connect() to unix:/var/run/php-fpm.socket failed (13: Permission denied)
chmod 777 /var/run/php-fpm.socket
2.2编译php
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/extends --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mysql=shared,mysqlnd --enable-sockets --with-mcrypt --with-curl --with-openssl --with-mysql --enable-mbstring
编译参数带上了--enable-fpm,这样编译时就会自动为我们编译php-fpm
--with-config-file-path 指定php的配置文件目录
--with-config-file-scan-dir 指定php的其它配置文件放到哪个目录下
同样,执行configure的时候会出现各种依赖库未找到的错误,还是可以通过apt-get install libxxx的方式添加这些库,或者自己下载源码编译安装这些库。
make make test make install
2.3配置php
把php的一些二进制执行文件软链接到系统执行目录中
ln -s /usr/local/php/bin/php /usr/local/bin/php ln -s /usr/local/php/bin/phpize /usr/local/bin/phpize
进入php的配置文件
cd /usr/local/php/etc
从源码包中复制php.ini-development或者php.ini-production文件到此目录下,并修改名字为php.ini
其中
php.ini-production 适合生产环境下的php配置文件
//php-fpm程序运行的pid记录文件 pid = /var/run/php-fpm.pid //在[www]区域的配置 user = www-data group = www-data //这样设置的目的是让tengine与php-fpm通过这个socket地址进行通信 listen = /var/run/php-fpm.socket //创建socket地址时的用户、组、权限, //最好以tengine运行的用户一致,这样tengine才有权限与php-fpm进行通信 listen.owner = www-data listen.group = www-data listen.mode = 0660
另外建议sock文件放在/dev/shm目录下 此目录下将sock文件放在内存里面,有助于性能提升
编译php扩展及配置
cd php-5.6.8/ext
举个例子吧,假如说我们要编译一个mcrypt扩展
进入mcrypt模块的源码目录
cd mcrypt
执行phpize来动态添加php扩展
phpize
编译安装
./configure make make install
安装好后,我们之前编译php时设置的--with-config-file-scan-dir就派上用场了,
进入设置的/usr/local/php/etc/extends目录,如果没有extends目录可以mkdir一个。
新建一个mcrypt.conf文件
vim mcrypt.conf
extension=mcrypt.so
php-fpm的启动脚本
cp php-5.6.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
修改php-fpm文件
vim /etc/init.d/php-fpm
prefix=/usr/local/php //这里的pid文件路径就是上面(php-fpm.conf)配置文件中所设置的pid php_fpm_PID=/var/run/php-fpm.pid
赋予可执行的权限:
chmod +x /etc/init.d/php-fpm
启动php-fpm:
/etc/init.d/php-fpm start
这样php和php-fpm的配置基本就完成了
Tengine代理PHP-FPM
cd /usr/local/nginx/conf/vhost
假设我们的web目录是在/opt/www,域名为t.com
新建一个t.com.conf配置文件
server { #访问端口 listen 80; #所绑定的域名 server_name t.com; access_log logs/host.access.log; location / { root /opt/www; index index.php index.html; } #设置php文件的代理转发 location ~ .php$ { root /opt/www; #转发至php-fpm配置文件中设置的socket通信地址 fastcgi_pass unix:/var/run/php-fpm.socket; fastcgi_index index.php; #所访问的php文件路径地址 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置文件创建成功后执行
/etc/init.d/nginx reload
参考文献:http://www.php-z.com/thread-1128-1-1.html