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中設置的值?
謝謝
這是正常的嗎?
是的。
這記錄在配置文件中。每個使用者必須有不同的位置以避免訪問問題。
所以在每個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"
這意味著
/var/opt/remi/php72/lib/php/session
僅由apache
使用者(您的發行版的 FPM 池中的預設使用者)使用。如果您使用多個 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