记录一下 nginx + php 中 php 及扩展包的安装,以及使用中遇到的一些问题,把这个随笔作为一个更新的笔记吧,有问题就记录到这里来。
内容索引: ---> php7.3安装
---> 1、在配置文件php.ini中修改 session.save_path 参数不生效的问题
---> 2、session不刷新(页面有成功操作,但无法正常进行下一页面)
---> 4、为 Cookie 启用 HTTP Only 选项
yum 安装php7.3
remi的源可以安装PHP
##安装remi的repo源 [root@localhost ~]# yum install epel-release yum-utils -y [root@localhost ~]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y ##安装php73,需要的版本和各种扩展可以使用 yum search php* 进行搜索查看 ##这里注意一下,PHP的扩展并不是约全面越好,要根据自己实际需要进行安装,当你以后需要的时候再去安装也可以,过多不需要的扩展可能会对性能产生影响 [root@localhost ~]# yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json \ > php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto \ > php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-pecl-swoole php73-php-recode php73-php-snmp php73-php-soap \ > php73-php-xml php73-php-yar php73-php-mysql php73-php-pecl-zip ##查看php安装版本信息 [root@localhost ~]# php73 -v PHP 7.3.27 (cli) (built: Feb 2 2021 10:32:50) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.27, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.27, Copyright (c) 1999-2018, by Zend Technologies ##启动并查看运行状态,顺便设置一个开机自动启动 [root@localhost ~]# systemctl start php73-php-fpm [root@localhost ~]# systemctl status php73-php-fpm ● php73-php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php73-php-fpm.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2021-03-28 21:34:21 CST; 4s ago Main PID: 5840 (php-fpm) Status: "Ready to handle connections" ...... [root@localhost ~]# systemctl enable php73-php-fpm Created symlink from /etc/systemd/system/multi-user.target.wants/php73-php-fpm.service to /usr/lib/systemd/system/php73-php-fpm.service. ##写个php测试页看看信息,前提是安装了nginx或者apache [root@localhost ~]# echo -e "<?php\n\tphpinfo()\n?>" > /usr/share/nginx/html/index.php
遇到的问题及解决办法:
1、在配置文件php.ini中修改 session.save_path 参数不生效的问题
修改其他参数都有变化,但是修改 session.save_path 参数的时候却没有变化,查看了目录的权限和拥有者所属组,并没有给错;
排查是不是有其他的配置文件覆盖了我们的参数设置,但是在 php.ini 中并没有相关的提示;
但是在php73的安装目录下 find 查找 .conf 文件,发现还有一个 www.conf ,打开搜索,中就有 session.save_path 参数的设置,把他修改之后restart php73-php-fpm 和 nginx -s reload,查看 phpinfo ,已经生效;
[root@localhost ~]# cd /etc/opt/remi/php73/ [root@localhost php73]# find . -name "*\.conf" ./php-fpm.conf ./php-fpm.d/www.conf ##编辑文件,搜索是在配置文件的结尾几行处 [root@localhost php73]# vim php-fpm.d/www.conf 435 php_value[session.save_handler] = files 436 php_value[session.save_path] = /var/opt/remi/php73/lib/php/session 437 php_value[soap.wsdl_cache_dir] = /var/opt/remi/php73/lib/php/wsdlcache 438 ;php_value[opcache.file_cache] = /var/opt/remi/php73/lib/php/opcache ##重启php73-fpm [root@localhost php73]# systemctl restart php73-php-fpm
注意:下次在修改服务参数的时候出现未报错却不生效的情况,可以在常规排查后加入多份配置文件生效覆盖的排查,知晓不同配置文件的作用以及生效顺序、优先级等。
2、session不刷新
本人遇到的情况是开启nginx和php-fpm后,进入网站的页面登陆后登录成功,却不进行下一页面的跳转。
需要注意的 php.ini 中 session.save_path 的设置,www.conf 中的 php_value[session.save_path] 设置;
以及生成的session文件(默认是/var/lib/php/session下)的权限问题;
这里有一个测试session是否刷新的代码;
页面放到根目录即可,然后访问,初始是1,当F5刷新页面增加即正常,目前出现问题,则一直为1;
<?php
session_start();
$_SESSION['num'] += 1;
print_r($_SESSION);
之后调整参数设置以及文件权限:
##修改session文件的权限,我使用得到是nginx,所以权限要给nginx用户的 ##如果找不到,使用find查找,默认生成在 /var/lib/php/session 下 [root@localhost ~]# chown nginx:root /var/lib/php/session -R ##修改 php.ini 配置文件 [root@localhost ~]# vim /etc/opt/remi/php73/php.ini ... ... session.save_path = /var/lib/php/session ... ... ##修改 www.conf 配置文件 [root@localhost ~]# vim /etc/opt/remi/php73/php-fpm.d/www.conf ... ... php_value[session.save_path] = /var/lib/php/session ... ...
注意:和上一个问题类似,有的时候问题出现在配置文件关联包含上,记得要排查所有相关的配置文件,同时注意相关的文件权限问题,很多相关目录是需要写权限的。
3、Apache无法解析PHP
当apache无法解析PHP文件时,请查看是否可以连接到php-fpm;
这个问题出现在升级了php7.0版本,到php7.3,并且开启php-fpm;
由于原来的apache配置并没有配置php-fpm的相关配置,所以要进行配置文件的调整;
##找到httpd中php-fpm的配置文件; ##php-fpm启动后,默认端口及地址为:127.0.0.1:9000,指向其即可 [root@localhost ~]# vim /etc/httpd/conf.modules.d/10-php-fpm.conf ... ... <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> ... ...
注意:其实配置 nginx 的配置文件时在 location 模块下会有 fastcgi_pass 127.0.0.1:9000; 的配置,就是配置php-fpm的监听地址及端口,只不过apache的配置位置并不是在其主配置文件中。
4、为 Cookie 启用 HTTP Only 选项
开启 php.ini 的相关设置项:
session.cookie_httponly = On