一、下载安装包
PHP官方下载页面右键另复制链接。
终端切换到/usr/loca/src/
目录下。
执行wget http://hk1.php.net/get/php-5.6.30.tar.bz2/from/this/mirror
下载。
下载后src
目录下多了一个mirror
的文件,这个其实就是刚才下载的PHP的安装包了,根据刚才页面上显示的内容,这个应该是一个.bz2结尾的压缩包。
mv mirror php-5.6.30.tar.bz2 # 改名。
tar jxf php-5.6.30.tar.bz2 # 解压
cd php-5.6.30 # 进入目录,准备编译安装
二、安装之前的准备
在安装PHP之前,先把PHP的一些依赖的库安装上。
yum -y install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel
各种库的作用:
- gd:不用多说,PHP的GD库。
- zlib zlib-devel:在上一篇编译安装Nginx的时候就已经说过,这是一个解压压缩用到的依赖,并且已经安装过,这里可以不安装。
- openssl openssl-devel:openssl是为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议。
- libxml2 libxml2-devel:对xml进行操作需要这个库提供的函数。
- libjpeg libjpeg-devel libpng libpng-devel:都是进行图片处理的所需要的库。
其实也没有几个库,除了GD库以外,都是安装一个基本库,然后安装PHP的时候还需要读取其头文件等信息,所以在基本库的后面加上
-devel
三、配置环境并安装
./configure --prefix=/usr/local/web/php \
--with-gd \
--enable-gd-native-ttf \
--enable-mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--enable-mbstring \
--enable-fpm
参数说明:
- 支持GD库及一些字体、支持MySQL连接和PDO连接、支持openssl、开启
mbstring
扩展。- 最后一句比较重要:让PHP作为一个独立进程运行(9000端口),在apache环境下,PHP是作为其下的一个模块运行。
如下所示环境配置成功了。
make && make install
编译安装
四、启动PHP进程
PHP安装完毕后,在/usr/local/web/php/sbin/
下存放着php-fpm
,运行。
- 报错
大概意思是说:
- 无法打开
/usr/local/web/php/etc/php-fpm.conf
这个文件,不存在。- 加载这个文件失败。
- FPM初始化失败。
究其原因,就是没有/usr/local/web/php/etc/php-fpm.conf
这个文件,当然也无法加载,FPM启动 需要读取这个配置文件,所以启动失败。
OK,进入到/usr/local/web/php/etc/
这个目录下查看。
果然没有php-fpm.conf
这个文件啊,不过有一个默认的php-fmp.conf.default
。
为了保险起见,把这个默认的文件复制一份并改名为php-fpm.conf
解决。
重新启动php-fpm
并查看进程。
五、整合Nginx和PHP
到目前为止,Nginx与PHP都已安装完毕,但并不能正常工作。
工作流程
当用户的访问请求到达我的服务器80端口,被Nginx监听到,但Nginx无法解析.php
文件,所以需要在配置里添加上规则。
如果遇到以.php
结尾的文件,可以直接在本机找到9000端口的进程php-fpm
告诉它这个.php
脚本的所在位置并交由PHP去解析,解析完毕后,再将结果返回给Nginx,Nginx再返回给用户。
修改Nginx配置
vim /usr/local/web/nginx/conf/nginx.conf
打开Nginx的配置文件。
65gg
跳转到65行。
将注释打开,将69
行的/scripts
替换为$DOCUMENT_ROOT
并保存、重启Nginx。
正确加载php.ini配置文件
至此,Nginx和PHP的整合工作已经做好了,去
html
目录下编写一个测试脚本index.php
,输出phpinfo()
。
如上图所示,在/usr/local/web/php/lib
目录下加载php.ini
配置文件并没有成功。
切换到这个目录下前来查看,发现只有一个php
文件夹,并没有php.ini
配置文件。
在/usr/local/src/php-5.6.30/
目录下,有php.ini-development
、php.ini-production
,前者是开发时用的配置,报错等级低,有什么报什么,后者相反。
执行cp php.ini-production /usr/local/web/php/lib/php.ini
复制一份配置文件到/usr/local/web/php/lib/
目录下,重启PHP。
再次访问,已可以看到正确加载了php.ini
配置文件。