【问题标题】:session_start() returns "No such file or directory" directly after creating the session filesession_start() 创建会话文件后直接返回“No such file or directory”
【发布时间】:2013-11-20 22:58:54
【问题描述】:

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

加载我的网页时出现错误:

Warning: session_start(): open(tmp\sess_gp13t5fg969iddfq1lrt3e88o1, O_RDWR) failed: No such file or directory (2)

奇怪的是我知道它可以看到该文件夹​​,因为我查看了我新创建的 tmp 文件夹,它实际上在抛出错误告诉我它不存在之前创建了 sess_gp13t5fg969iddfq1lrt3e88o1 文件。那么它如何创建文件然后看不到它呢?我可能做错了什么?

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

【问题讨论】:

  • 您解决了哪些问题?它说没有这样的文件或目录,那么你怎么知道是哪一个导致了错误?您是否尝试过在该目录中打开另一个文件?会不会是相对路径找不到文件夹?
  • @GaryHayes 果然,如果我将文件夹的完整路径放在 session.save_path 下,它就可以工作。但是,我确实需要在这里使用相对路径,因为我们在多个开发工作站中使用相同的 php.ini 文件,而 PHP 可能安装在其他地方。为什么在 session.save_path 下使用相对路径会导致此问题,我该如何解决?
  • 什么版本的 IIS/Windows?

标签: php session iis permissions fastcgi


【解决方案1】:

我找到了你想要的答案:

Relative Paths in PHP

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

【讨论】:

    【解决方案2】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多