无法使用 php 写入 /tmp,尽管有 777 个权限并且没有open_basedir值

2022-08-30 12:02:20

我试图使用php fopen函数将文件写入我的/tmp目录(在apache服务器上),但它失败了:

<?php
$handle = fopen("/tmp/test.txt", "x");
if ($handle) 
   echo "Success!";
else 
    print_r(error_get_last());

这将返回错误消息:

无法打开流:没有此类文件或目录。

该目录的权限设置为,我可以看到Web用户正在向其写入其他文件。神秘的是,如果我将脚本指向另一个具有权限的文件夹,它将返回成功。但是我没有价值。我有 和 ,但我认为这不应该解释它?/tmpdrwxrwxrwt777open_basedirsafe_mode=onallow_url_fopen=off

这是 Apache Httpd 2.0 上的 PHP 5.3.10。


答案 1

我有完全相同的问题。PHP 报告在 中打开文件时没有问题,但该路径中没有文件。然后我做了/tmp/myoutputfile

find / -name "myoutputfile"

并在.我在谷歌上找到了这篇文章
所以,在我的情况下,它是Systemd和Apache Httpd的组合。我希望这对某人有所帮助。/tmp/systemd-…/myoutputfile


答案 2

您的问题可能是由 systemd 和 apache 的组合引起的。这是一个名为PrivateTmp的安全功能,显然这是一个选择退出。

如果您不想要它,可以像这样禁用它:

  1. 将相应的开关注释在 :/etc/systemd/system/multi-user.target.wants/apache2.service#PrivateTmp=true
  2. 重新启动系统:sudo systemctl daemon-reload
  3. 重新启动 apache:sudo systemctl restart apache2

推荐