在Ubuntu 10.10上安装Apache/PHP时,会话文件的默认位置是什么?
ou6hu8tu1#
defaultsession.save_path被设置为"",它将计算到系统的临时目录。请参阅https://bugs.php.net/bug.php?id=26757上的注解:
session.save_path
""
在即将发布的版本中,保存_path的新默认值将是空字符串,这将导致探测临时目录。可以使用sys_get_temp_dir to return the directory path used for temporary files要查找当前会话保存路径,可以使用
sys_get_temp_dir
session_save_path()
请参考this answer,了解当此函数返回空字符串时,临时路径是什么。
o3imoua42#
首先使用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中(虽然我自己没有测试过)。
ini_get('session.save_path')
phpinfo()
/var/lib/php5
/var/lib/php/session
/tmp
ecfsfe2w3#
如果不确定session.save_path的编译默认值,请查看相关的php.ini。通常,这将显示注解掉的默认值。Ubuntu/Debian旧/新php.ini位置:旧版php5与Apache:/etc/php5/apache2/php.ini旧版php5与NGINX+FPM:/etc/php5/fpm/php.iniUbuntu 16+ with Apache:/etc/php/*/apache2/php.ini *Ubuntu 16+与NGINX+FPM - /etc/php/*/fpm/php.ini *
php.ini
/etc/php5/apache2/php.ini
/etc/php5/fpm/php.ini
/etc/php/*/apache2/php.ini
/etc/php/*/fpm/php.ini
/*/
在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"个
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
$ 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本身使用“PHP”环境获取值(参见下面的 * 注意 *):
APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
$ 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的(命令行)版本 * 通常 * 具有与Apache 2/FPM版本相同的默认值(至少对session.save_path来说是这样)。你也可以使用类似的命令将web服务器当前的PHP模块设置回显到网页上,然后使用wget/curl来获取信息。在这方面,phpinfo()使用了are many posts。但是,使用PHP接口或grep在正确的php.ini中显示其默认值会更快。编辑:Per @aesede评论->添加了php -i。谢谢
grep
php -i
xt0899hw4#
除了/tmp/之外,另一个常见的默认位置是/var/lib/php5/
/tmp/
/var/lib/php5/
kulphzqa5#
我在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。
/var/tmp
/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
sys_get_temp_dir()
czfnxgou6#
以上这些都不适用于我使用CentOS 7和PHP 7.2的IUS repo:
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/文件夹中:
/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
型
xzabzqsa7#
要找到当前session.save_path值,唯一可靠的选择是始终在您希望找到会话存储目录的环境中使用phpinfo()进行检查。理由:可以有各种各样的事情来改变session.save_path,要么通过覆盖php.ini值,要么通过在运行时用ini_set('session.save_path','/path/to/folder');设置它。例如,像ISPConfig,Plesk等Web服务器管理面板经常调整这一点,给予每个网站自己的会话文件目录。
ini_set('session.save_path','/path/to/folder');
erhoui1w8#
我相信它在/tmp/。检查你的phpinfo函数,它应该说session.save_path在那里的某个地方。
8条答案
按热度按时间ou6hu8tu1#
default
session.save_path
被设置为""
,它将计算到系统的临时目录。请参阅https://bugs.php.net/bug.php?id=26757上的注解:在即将发布的版本中,保存_path的新默认值将是空字符串,这将导致探测临时目录。
可以使用
sys_get_temp_dir
to return the directory path used for temporary files要查找当前会话保存路径,可以使用
session_save_path()
— Get and/or set the current session save path的请参考this answer,了解当此函数返回空字符串时,临时路径是什么。
o3imoua42#
首先使用
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
中(虽然我自己没有测试过)。ecfsfe2w3#
如果不确定
session.save_path
的编译默认值,请查看相关的php.ini
。通常,这将显示注解掉的默认值。
Ubuntu/Debian旧/新
php.ini
位置:旧版php5与Apache:
/etc/php5/apache2/php.ini
旧版php5与NGINX+FPM:
/etc/php5/fpm/php.ini
Ubuntu 16+ with Apache:
/etc/php/*/apache2/php.ini
*Ubuntu 16+与NGINX+FPM -
/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本身使用“PHP”环境获取值(参见下面的 * 注意 *):
字符串
这些也将发挥作用:
型
注意事项:
“”
php.ini
的(命令行)版本 * 通常 * 具有与Apache 2/FPM版本相同的默认值(至少对session.save_path
来说是这样)。你也可以使用类似的命令将web服务器当前的PHP模块设置回显到网页上,然后使用wget/curl来获取信息。在这方面,phpinfo()
使用了are many posts。但是,使用PHP接口或grep
在正确的php.ini
中显示其默认值会更快。编辑:Per @aesede评论->添加了
php -i
。谢谢xt0899hw4#
除了
/tmp/
之外,另一个常见的默认位置是/var/lib/php5/
kulphzqa5#
我在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。czfnxgou6#
以上这些都不适用于我使用CentOS 7和PHP 7.2的IUS repo:
字符串
但是,会话未保存在
/tmp
文件夹中,而是保存在/var/lib/php/mod_php/session/
文件夹中:型
xzabzqsa7#
要找到当前
session.save_path
值,唯一可靠的选择是始终在您希望找到会话存储目录的环境中使用phpinfo()
进行检查。理由:可以有各种各样的事情来改变
session.save_path
,要么通过覆盖php.ini
值,要么通过在运行时用ini_set('session.save_path','/path/to/folder');
设置它。例如,像ISPConfig,Plesk等Web服务器管理面板经常调整这一点,给予每个网站自己的会话文件目录。erhoui1w8#
我相信它在/tmp/。检查你的phpinfo函数,它应该说session.save_path在那里的某个地方。