session_start() 在创建会话文件后直接返回"No such file or directory"



我正试图通过fastcgi服务器在我的IIS/PHP上设置session.save_path。因此,我在php文件夹中创建了一个名为tmp的新文件夹,授予IUSR和IIS_IUSRS对该文件夹的完全权限,并将php.ini中的session.save_path变量设置为"\tmp"。

加载我的网页时,我得到错误:

Warning: session_start(): open(tmpsess_gp13t5fg969iddfq1lrt3e88o1, O_RDWR) failed: No such file or directory (2)

奇怪的是,我知道它可以看到这个文件夹,因为我查看了我新创建的tmp文件夹,它实际上创建了sess_gp13t15fg969iddfq1lrt3e88o1文件,然后抛出错误,告诉我它不存在。那么,它怎么能创建文件却看不到它呢?我可能做错了什么?

更新:如果我用绝对路径设置session.save_path,它就可以工作了。当我给它一个只有"\tmp"的相对路径时,它就不再工作了。我看到的每个示例都使用save_path的相对路径,我个人需要使用相对路径。为什么相对路径会导致此问题,我该如何解决?

我找到了你想要的答案:

PHP 中的相对路径

include($_SERVER["DOCUMENT_ROOT"] . "/relative path here");

在linux下,systemd的PrivateTmp配置可能存在问题。解决方案是将相应的systemd单元文件复制到/etc/systemd,并在那里删除privatetmp配置。就我而言:

cp /usr/lib/systemd/system/httpd.service /etc/systemd/system
systemctl daemon-reload
systemctl restart httpd.service

更改/etc/systemd/httpd.service,然后更改

PrivateTmp=true

PrivateTmp=false

最新更新