【发布时间】:2011-06-23 02:34:03
【问题描述】:
在 Ubuntu 10.10 上安装 Apache/PHP 时会话文件的默认位置是什么?
【问题讨论】:
-
只需使用
<?php phpinfo() ?>做一个页面并查找session.save_path。 -
通常 /tmp (IIRC) 但请检查您的 php.ini 中的 session.save_path
在 Ubuntu 10.10 上安装 Apache/PHP 时会话文件的默认位置是什么?
【问题讨论】:
<?php phpinfo() ?> 做一个页面并查找session.save_path。
默认 session.save_path 设置为"",它将评估为您系统的临时目录。请参阅https://bugs.php.net/bug.php?id=26757 的此评论说明:
在即将发布的版本(原文如此)中,save_path 的新默认值将是空字符串,这会导致临时目录被探测。
你可以使用sys_get_temp_dir to return the directory path used for temporary files
要查找当前会话保存路径,可以使用
请参阅this answer,了解此函数返回空字符串时的临时路径。
【讨论】:
php.ini 文件,php_info() 会告诉您当前评估期间正在使用哪个文件,locate php.ini 会帮助您找到它们
首先使用ini_get('session.save_path') 或phpinfo() 检查session.save_path 的值。如果它不是空的,那么它将显示会话文件的保存位置。在许多情况下,默认情况下它是空的,在这种情况下请继续阅读:
在 Ubuntu 或 Debian 机器上,如果未设置 session.save_path,则会话文件将保存在 /var/lib/php5 中。
在 RHEL 和 CentOS 系统上,如果没有设置session.save_path,会话文件将保存在/var/lib/php/session中
我认为如果你从源代码编译PHP,那么当session.save_path不设置时,会话文件将保存在/tmp中(虽然我自己没有测试过)。
【讨论】:
php.ini 中的任何内容)我的会话位于 /var/lib/php5/sessions
php -i | grep session.save_path 用于 CLI(可能还有 Apache)会话保存路径。此外,给定的php.ini 通常会显示“默认”路径 - 它只是被注释掉了。
/tmp)作为其后备/默认值。请参考php.net/manual/en/…
/etc/php/7.0/*/php.ini -> ;session.save_path = "/var/lib/php/sessions" -- 评论并不意味着“未设置”只是我的意思。它显然设置为“空白”(/tmp)以外的其他内容。并且不是空/空字符串
如果不确定session.save_path 的编译默认值,请查看相关的php.ini。
通常,这将显示注释掉的默认值。
Ubuntu/Debian 旧/新 php.ini 位置:
带有 Apache 的旧 php5:/etc/php5/apache2/php.ini
带有 NGINX+FPM 的旧 php5:/etc/php5/fpm/php.ini
带有 Apache 的 Ubuntu 16+:/etc/php/*/apache2/php.ini *
带有 NGINX+FPM 的 Ubuntu 16+ - /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 获取信息。还有are many posts关于phpinfo()在这方面的使用。但是,在正确的php.ini 中使用PHP 接口或grep 来显示它的默认值会更快。
编辑:根据@aesede 评论-> 添加php -i。谢谢
【讨论】:
php -i 以获得 phpinfo() 等效项。
除了/tmp/之外,另一个常见的默认位置是/var/lib/php5/
【讨论】:
我在 Mac 上查找会话的正确路径时遇到了同样的问题。总而言之,我发现 CLI PHP 的临时目录与 Apache 模块不同:Apache 使用 /var/tmp,而 CLI 使用类似 /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T 的目录。但是两种方式,当session.save_path 为空时,sys_get_temp_dir() 让我找到了正确的道路。使用 PHP 5.5.4。
【讨论】:
在使用带有 PHP 7.2 的 CentOS 7 的 IUS 存储库时,上述方法均不适用于我:
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
【讨论】:
我相信它在 /tmp/ 中。不过,请检查您的 phpinfo 函数,它应该在某处显示 session.save_path。
【讨论】:
/tmp 中——你知道吗?如果您从源代码构建 PHP,是否会出现这种情况?当“session.save_path”为空时,很难弄清楚文件的去向(因此我怀疑这个问题)
找到当前session.save_path 值的唯一可靠选项是始终在您想要找出会话存储目录的环境中检查phpinfo()。
原因:可以通过覆盖php.ini 值或在运行时使用ini_set('session.save_path','/path/to/folder'); 设置它来改变session.save_path 的各种事物。例如,ISPConfig、Plesk 等 Web 服务器管理面板通常会对此进行调整,为每个网站提供包含会话文件的自己的目录。
【讨论】: