考虑到自带的源有的组件没有,可以先安装epel第三方源
yum -y install epel-release
yum -y install gcc automake autoconf libtool make gcc-c++ glibc 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 libmcrypt mcrypt mhash php-mcrypt
php官方地址:https://www.php.net/releases/
本次安装环境的版本包为php5.6
wget http://cn2.php.net/distributions/php-5.6.24.tar.gz
tar zvxf php-5.6.24.tar.gz
cd php-5.6.24
php编译过程中,如果要php支持相应的功能,需要先安装对应的组件,然后再编译。
./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli
make && make install
复制配置文件,对其中一些代码进行修改,可根据需要开启php中的功能
cp php.ini-development /usr/local/php/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin
修改php-fpm.conf配置文件,使用www用户和www用户组运行
vim /usr/local/php/etc/php-fpm.conf
#修改为以下
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www
group = www
修改php.ini,根据需求开启需要的php功能
vim /usr/local/php/php.ini
#############################
display_errors = On
display_startup_errors = On
error_prepend_string = "
"
error_append_string = "
"
fastcgi.impersonate = 1
date.timezone = asia/Shanghai
extension=php_mysql.dll
extension=php_gd2.dll
extension=php_mbstring.dll
需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。
将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 0 。
打开 php.ini,定位到 cgi.fix_pathinfo= 并将其修改为如下所示:
vim /usr/local/php/php.ini
##########################
cgi.fix_pathinfo=0
/usr/local/bin/php-fpm
#查看是否运行
netstat -anop | grep php
出现以下界面表示正常运行:
修改NGINX配置文件,nginx.conf其中server段增加如下配置,注意标记内容配置,否则会出现No input file specified.错误
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ .php$ {
root html; #网站程序目录,根据需求修改
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /html$fastcgi_script_name; #/html 为网站程序目录
include fastcgi_params;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
若是要使用apache,编译时候需加上
--with-apxs2=/usr/local/apache/bin/apxs
#apxs路径自行确认,如果是yum安装,没有找到apxs需要安装下httpd-devel组件
在httpd.conf添加以下配置:
LoadModule php5_module modules/libphp5.so
##########################################
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
我们使用的系统为CentOS 7,以systemd 这个系统守护进程服务来对php的服务进行操作优化,实现的功能为:通过systemctl 命令来对php服务进行启动、停止、重启及开机自启服务。
编写配置文件:
vim /usr/lib/systemd/system/php-fpm.service
##########################################
[Unit]
Description=php-fpm Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/bin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
ExecReload=/bin/pkill -9 php-fpm && /usr/local/bin/php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
接下来测试命令是否执行成功:
systemctl start php-fpm.service
systemctl stop php-fpm.service
systemctl restart php-fpm.service
systemctl status php-fpm.service
执行的结果:
查看main pid在重启后是否有变化。
是否支持开机重启
PHP 官方文档:https://www.php.net/manual/zh/install.php
阮一峰的网络日志:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
http://www.siguoya.name/pc/home/article/46