首页 文章

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

提问于
浏览
16

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

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

这将返回错误消息“无法打开流:没有此类文件或目录” . / tmp目录的权限设置为drwxrwxrwt,我可以看到Web用户正在向其写入其他文件 . 神奇的是,如果我将脚本指向具有权限777的另一个文件夹,它将返回成功 . 但我的open_basedir“没有 Value ” . 我有safe_mode = on和allow_url_fopen = off,但我认为不应该解释它吗?

这是关于apache 2.0的php 5.3.10 .

3 回答

  • 29

    我有完全相同的问题 . PHP报告在 /tmp/myoutputfile 中打开文件没有问题,但该路径中没有文件 . 然后我做了 find / -name "myoutputfile" 并在 /tmp/systemd-.../myoutputfile 找到了它 . 谷歌找到http://blog.oddbit.com/2012/11/05/fedora-private-tmp/ . 所以在我的情况下它是systemd apache组合 . 希望这会对某人有所帮助 .

  • 0

    根据显示的错误消息,没有文件夹 /tmp/ . 也许tmp文件夹在除root之外的其他地方?

    如果文件实际上不存在,则不会显示此错误,因为它将尝试创建该文件 .

    如果文件已存在,方法 x 也会返回警告 . (doc:http://www.php.net/manual/en/function.fopen.php

    我认为这也是另一个可能出错的原因,执行PHP的用户无法在 /tmp/ 文件夹中写入 .

  • 0

    尝试将 /tmp 添加到 open_basedir . 例如:

    php_admin_value open_basedir /some/path:/another/path:/tmp
    

    我不确定这是你实际遇到的问题,但我在寻找这个解决方案时发现了你的问题,所以我想这可能对其他人有帮助 .

相关问题