PHP编译安装

同志们,记得首先要安装Mysql啊,由于Mysql的安装步骤在之前的LAMP中已经讲过了,大家不会安装的一定要去看之前的文章哦

Mysql编译安装教程

1. 下载PHP源码包

cd /usr/local/src

wget http://au1.php.net/distributions/php-5.4.44.tar.bz2

2. 解压压缩包,创建php-fpm账号

tar jxvf php-5.4.44.tar.bz2

useradd -s /sbin/nologin php-fpm


这里我有个疑问,为什么之前LAMP安装的时候不用单独创建个用户?这个php-fpm用户时用来干嘛的呢?这个php和之前的有什么区别呢?

在看区别之前,大家还是先来了解一下什么是CGI,FCGI,FPM

CGI,FCGI,FPM的简介

在LNMP中,Nginx本身对脚本不做任何的处理,而是去调用一个PHP-FPM的进程,二者是相互独立的。所以咱们的账户是用来跑php-fpm服务的,php-fpm是一个常驻进程。

在LAMP中,PHP是Apache的一个模块,具有相同的生命周期,当Apache需要PHP解析的时候才会调用这个模块,解释后返回给服务器。


3. 拷贝php配置文件php.ini

cp /usr/local/src/php-5.4.44/php.ini-production /usr/local/php/etc/php.ini

4. 修改php-fpm的配置文件

初始状态下并没有自动生成php-fpm.conf这个文件,我去/usr/local/php/etc/目录下看了下,有个php-fpm.conf.default这个文件,其实都一样,我们拷贝一份或者改名成php-fpm.conf都可以

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

然后我们来修改配置文件

vim /usr/local/php/etc/php-fpm.conf

在[global]下加入如下配置(大概22行的位置)

pid = /usr/local/php/var/run/php-fpm.pid

error_log = /usr/local/php/var/log/php-fpm.log

在[www]下面加入如下配置(大概133行的位置)

listen = /tmp/php-fcgi.sock

user = php-fpm

group = php-fpm

pm = dynamic

pm.max_children = 50

pm.start_servers = 20

pm.min_spare_servers = 5

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024


配置解释:

pid = /usr/local/php/var/run/php-fpm.pid

#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启

error_log= /usr/local/php/var/log/php-fpm.log

#错误日志,默认在安装目录中的var/log/php-fpm.log

listen = /tmp/php-fcgi.sock

#这里牵涉到ngix和php-fpm的通信方式,之后会生成一个socket文件

在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。

unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。”

tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。

user = php-fpm

group = php-fpm

配置运行php-fpm的用户和用户组,是我们之前创建的用户和用户组

pm = dynamic

#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:

pm.max_children #子进程最大数

pm.start_servers #启动时的进程数

pm.min_spare_servers #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

pm.max_spare_servers #保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

rlimit_files = 1024

#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit-n查看,ulimit -n 2048修改。《这个我也不知道是什么东东》

5. 拷贝php-fpm的启动脚本

cp /usr/local/src/php-5.4.44/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

更改权限755

chmod 755 /etc/init.d/php-fpm

6. 启动php-fpm

service php-fpm start

7. 测试php-fpm是否启动

ps aux | grep php-fpm

8. 配置php-fpm服务开机启动

chkconfig php-fpm on

查看是否配置开机启动成功

chkconfig php-fpm --list


问题集锦:
在./configure过程中可能会出现以下错误


错误1:

error: xml2-config not found. Please check your libxml2 installation.

解决:

yum install libxml2 -y

yum install libxml2-devel -y

问题2:

error: Cannot find OpenSSL's

解决:

yum install openssl openssl-devel -y

问题3:

error: Please reinstall the BZip2 distribution

解决:

yum install bzip2 bzip2-devel -y

问题4:

error: jpeglib.h not found

解决:

yum -y install libjpeg libjpeg-devel

问题5:

error: png.h not found

解决:

yum -y install libpng libpng-devel

问题6:

error: freetype-config not found.

解决:

yum install -y freetype-devel

问题7:

error: mcrypt.h not found. Please reinstall libmcrypt.

解决:

yum  install epel-release

yum install libmcrypt libmcrypt-devel

问题7:

Cannot retrieve metalink for repository: epel. Please verify its path and try again

原因:

yum-epel升级到0.5.2版本,更换了https链接,所以原来的镜像列表就过时了

解决:

yum –disablerepo=epel -y update ca-certificates

yum install libmcrypt libmcrypt-devel

问题8:

Error: File /var/cache/yum/i386/6/epel/metalink.xml does not exist

原因:

这个epel-7是不能用于centos6.x的,卸载了,再安装就行了:

如果是CentOS6.x执行下面就行了:

解决:

yum remove epel-release --disablerepo=epel

yum install epel-release

问题9

WARNING: unrecognized options: --enable-zend-multibyte

解决:

不用理会,版本问题

问题10

error: Please reinstall the libcurl distribution -easy.h should be in /include/curl

解决:

yum install -y libcurl-devel


你可能感兴趣的:(PHP编译安装)