【问题标题】:PHP fopen() function does not create a filePHP fopen() 函数不创建文件
【发布时间】:2020-11-24 05:59:20
【问题描述】:

我正在尝试使用以下代码在我的 PHP 应用程序中创建一个文件:

$file = @fopen(Data::$FILE_PATH, 'w'); //I also tried with 'x'
if(!$file)
{
    new ErrorReporter('Error 3');
    return;
}

它总是显示错误 3 文本。

PHP 脚本有 chmod 777,我尝试制作 $FILE_PATH:

  • /var/www/data.json
  • /var/data.json
  • /root/data/data.json
  • /var/test/data.json

但以下方法均无效,文件从未创建。

我尝试手动创建文件并使用以下函数对其进行调试:

    private function debug()
    {
        $file = Data::$FILE_PATH;

        error_reporting(E_ALL);
        ini_set('display_errors', true);
        echo 'phpversion: ', phpversion(), "\n";
        echo 'uname: ', php_uname("s r"), "\n"; // name/release of the operating system
        //echo 'sapi: ', php_sapi(), "\n";

        echo $file, file_exists($file) ? ' exists' : ' does not exist', "\n";
        echo $file, is_readable($file) ? ' is readable' : ' is NOT readable', "\n";
        echo $file, is_writable($file) ? ' is writable' : ' is NOT writable', "\n";

        $fp = fopen($file, 'w');
        if ( !$fp ) {
            echo 'last error: ';
            var_dump(error_get_last());
        }
        else {
            echo "ok.\n";
        }
        die('done');
    }

文件:

  • 存在
  • 可读
  • 不可写

调试函数中出现的错误是: failed to open stream: Permission denied in /path/to/the/file on line 108

第 108 行内容:

$fp = fopen($file, 'w');

但正如我之前所说,脚本的 chmod 是 777,$FILE_PATH 文件是 664。

在这种情况下谁能帮助我?

【问题讨论】:

  • 你不能在这些目录中写...这再明显不过了,或者可以更好地解释没有人可以为你“修复”,使用另一个你被允许的目录写。
  • 即使在 /var/www/data.json 中?
  • 脚本文件的权限无关。重要的是您尝试写入的文件夹的权限,以及脚本运行的“用户”身份。

标签: php


【解决方案1】:

经过一番尝试,我终于找到了解决办法:

我不得不更改目标文件夹的 chmod。我做了 777,但你可以找到更安全的 chmod。

总结一下 - 您需要更改 PHP 脚本和目标文件夹的权限。

【讨论】:

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