在 Ubuntu 10.10 上安装 Apache/PHP 时会话文件的默认位置是什么?
session.save_path
设置为 ""
,它将评估您系统的临时目录。请参阅此评论 https://bugs.php.net/bug.php?id=26757 指出:
即将发布的版本(原文如此)中 save_path 的新默认值将是空字符串,这会导致临时目录被探测。
sys_get_temp_dir
返回临时文件使用的目录路径
要查找当前会话保存路径,您可以使用
参考这个答案来了解当该函数返回空字符串时临时路径是什么。
首先使用
session.save_path
或 ini_get('session.save_path')
检查 phpinfo()
的值。如果它非空,那么它将显示会话文件的保存位置。在许多情况下它默认为空,在这种情况下请继续阅读:
在 Ubuntu 或 Debian 计算机上,如果未设置
session.save_path
,则会话文件将保存在 /var/lib/php5
中。
在 RHEL 和 CentOS 系统上,如果未设置
session.save_path
,会话文件将保存在 /var/lib/php/session
我认为如果你从源代码编译PHP,那么当未设置
session.save_path
时,会话文件将保存在/tmp
中(不过我自己没有测试过)。
如果不确定
session.save_path
的编译默认值,请查看相关的 php.ini
。Ubuntu/Debian 旧/新
php.ini
位置:/etc/php5/apache2/php.ini
/etc/php5/fpm/php.ini
/etc/php/*/apache2/php.ini
*/etc/php/*/fpm/php.ini
*
*
/*/
= 系统上安装的当前 PHP 版本。显示 Apache 下正在使用的 PHP 版本:
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
由于 PHP 7.3 是本示例运行的版本,因此您可以将其用于
php.ini
:
$ grep "session.save_path" /etc/php/7.3/apache2/php.ini
;session.save_path = "/var/lib/php/sessions"
或者,组合单行:
APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
结果:
;session.save_path = "/var/lib/php/sessions"
或者,使用 PHP 本身使用“cli”环境来获取值(参见下面的NOTE):
$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$
这些也可以工作:
php -i | grep session.save_path
php -r 'echo phpinfo();' | grep session.save_path
注意:
php.ini
的“cli”(命令行)版本通常具有与Apache2/FPM版本相同的默认值(至少与session.save_path
相同)。您还可以使用类似的命令将 Web 服务器当前的 PHP 模块设置回显到网页,并使用 wget/curl 来获取信息。关于 phpinfo()
在这方面的使用,有很多帖子。但是,使用 PHP 接口或在正确的
grep
中显示其默认值会更快。编辑:根据 @aesede 评论 -> 添加 php.ini
。谢谢
php -i
之外,另一个常见的默认位置是
/tmp/
/var/lib/php5/
,而 CLI 使用类似
/var/tmp
的东西。但无论哪种方式,当 /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
为空时,sys_get_temp_dir()
都让我找到了正确的路径。使用 PHP 5.5.4。 session.save_path
但是,会话并未保存在
php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )
php -r 'echo session_save_path(), "\n";
>
php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp
文件夹中,而是保存在
/tmp
文件夹中:/var/lib/php/mod_php/session/
ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
值的唯一可靠选项始终是在您想要查找会话存储目录的环境中使用
session.save_path
进行检查。原因:可能有各种各样的事情会改变
phpinfo()
,可以通过覆盖
session.save_path
值或在运行时使用 php.ini
设置它。例如,像 ISPConfig、Plesk 等 Web 服务器管理面板经常采用这种方式,为每个网站提供自己的包含会话文件的目录。