编译安装PHP7

安装库

yum install libxml2-devel gd-devel libmcrypt-devel libcurl-devel openssl-devel

下载

wget -c http://be2.php.net/distributions/php-7.1.8.tar.gz

编译

1.解压进入目录

# cd php-7.1.8

2.编译配置

#./configure --prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-config-file-scan-dir=/usr/local/php7/etc/php.d \
--with-mcrypt=/usr/include \
--enable-mysqlnd \
--with-mysqli \
--with-pdo-mysql \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-gd \
--with-iconv \
--with-zlib \
--enable-xml \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache

出现如图所示

则表示配置没问题

然后执行

make && make install

然后配置 php-fpm.d

# cd /usr/local/php7/etc
# mv php-fpm.conf.default php-fpm.conf
# mv php-fpm.d/www.conf.defualt php-fpm.d/www.conf
# mv php-fpm.d/www.conf.default php-fpm.d/www.conf

然后进入 php 的源码目录

# cd php-7.1.8/sapi/fpm/
# cp init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# # chkconfig php-fpm on

然后启动

[root@aliyun fpm]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm warning, no pid file found - php-fpm is not running ?
Starting php-fpm [26-Aug-2017 16:52:34] ERROR: [pool www] cannot get uid for user 'nginx'
[26-Aug-2017 16:52:34] ERROR: FPM initialization failed
 failed

报错了?这要进入

# cd /usr/local/php7/etc/php-fpm.d/
# vim www.conf

将用户和组修改为何 nginx 一样的组合用户吧,这里我设置的是 www

user = www
group = www

或者编译的时候指定用户和组

--with-fpm-user=nginx \
--with-fpm-group=nginx \

用 nginx 做代理

编译 nginx 的配置文件

vim /usr/local/nginx/conf/nginx.conf

去掉默认的注释

location ~ \.php$ {
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include        fastcgi_params;
       }

修改为

location ~ \.php$ {
           #root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /$document_root$fastcgi_script_name;                
           include        fastcgi_params;
       }

然后定义下首页内容加上 php

root   html;
index index.php index.html index.htm;

重启 nginx

/etc/init.d/nginx restart

在 web 站点的目录下新建一个 phpinfo.php 文件

[root@aliyun html]# pwd
/usr/local/nginx/html
[root@aliyun html]# vim phpinfo.php
[root@aliyun html]# cat phpinfo.php
<?php
    phpinfo();

访问效果

问题

1.找不到 php.ini

进入源码目录

cp php.ini-production /usr/local/php7/etc/php.ini

然后执行

# /usr/local/php7/bin/php --ini
Configuration File (php.ini) Path: /usr/local/php7/etc
Loaded Configuration File:         /usr/local/php7/etc/php.ini
Scan for additional .ini files in: /usr/local/php7/etc/php.d
Additional .ini files parsed:      (none)

2.关闭响应头中的 php 版本

编辑 php.ini 找到如下参数设置为 off

expose_php = Off

3.通过 nginx请求 php 文件提示nginx File not found 错误,原因是php-fpm进程找不到SCRIPT_FILENAME配置的要执行的.php文件,php-fpm返回给nginx的默认404错误提示。

解决方案:确定是我上面那样配置的,不要打错了。