PHP 似乎在两个不同的位置有会话文件?

PHP 似乎在两个不同的位置有会话文件?

我有一个运行 nginx 和 PHP 7.2 的 CentOS 6 盒子。

我的 php 7.2 会话文件位于我期望的位置,在

/var/opt/remi/php72/lib/php/session

然而,我刚刚注意到,其中较少的一部分存在于

/tmp

我只安装了一个版本的 php,运行多个站点。 报告每个站点的第一个目录。我根本phpInfo();找不到有关会话的任何参考。/tmp

我发现如果我运行,php -r 'phpInfo();' | grep save_path就会得到session.save_path => no value => no value,所以我猜这是导致它的原因?也就是说,我的 cron 作业正在创建空的会话文件。

这是正常的吗?如果是,为什么?为什么从命令行运行 php 不使用 php.ini 中设置的值?

谢谢

答案1

这是正常的吗?

是的。

这在配置文件中有记录。每个用户必须有不同的位置以避免访问问题。

因此路径在每个SAPI文件中配置

默认为/tmp(对于 CLI 用户)

请参阅 php.ini 中的以下注释:

; RPM note : session directory must be owned by process owner
; for mod_php, see /etc/httpd/conf.d/php.conf
; for php-fpm, see /etc/php-fpm.d/*conf
;session.save_path = "/tmp"

这意味着仅由用户(发行版的 FPM 池中的默认用户)/var/opt/remi/php72/lib/php/session使用。apache

如果您使用多个 FPM 池,并与不同的用户一起运行,则必须为每个池设置不同的位置,请参阅php-fpm.d/www.conf

; Set the following data paths to directories owned by the FPM process user.
;
; Do not change the ownership of existing system directories, if the process
; user does not have write permission, create dedicated directories for this
; purpose.
;
; See warning about choosing the location of these directories on your system
; at http://php.net/session.save-path
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
;php_value[opcache.file_cache]  = /var/lib/php/opcache

相关内容