我有一个运行 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