Apache/PHP中的会话文件的位置

wnrlj8wa  于 5个月前  发布在  PHP
关注(0)|答案(8)|浏览(81)

在Ubuntu 10.10上安装Apache/PHP时,会话文件的默认位置是什么?

ou6hu8tu

ou6hu8tu1#

defaultsession.save_path被设置为"",它将计算到系统的临时目录。请参阅https://bugs.php.net/bug.php?id=26757上的注解:

在即将发布的版本中,保存_path的新默认值将是空字符串,这将导致探测临时目录。
可以使用sys_get_temp_dir to return the directory path used for temporary files
要查找当前会话保存路径,可以使用

请参考this answer,了解当此函数返回空字符串时,临时路径是什么。

o3imoua4

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中(虽然我自己没有测试过)。

ecfsfe2w

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 -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。谢谢

xt0899hw

xt0899hw4#

除了/tmp/之外,另一个常见的默认位置是/var/lib/php5/

kulphzqa

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。

czfnxgou

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/文件夹中:

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn

xzabzqsa

xzabzqsa7#

要找到当前session.save_path值,唯一可靠的选择是始终在您希望找到会话存储目录的环境中使用phpinfo()进行检查。
理由:可以有各种各样的事情来改变session.save_path,要么通过覆盖php.ini值,要么通过在运行时用ini_set('session.save_path','/path/to/folder');设置它。例如,像ISPConfig,Plesk等Web服务器管理面板经常调整这一点,给予每个网站自己的会话文件目录。

erhoui1w

erhoui1w8#

我相信它在/tmp/。检查你的phpinfo函数,它应该说session.save_path在那里的某个地方。

相关问题