Php

PHP 似乎在兩個不同的位置有會話文件?

  • February 22, 2021

我有一個執行 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

引用自:https://serverfault.com/questions/915682