【问题标题】:Not able to open a file in php无法在php中打开文件
【发布时间】:2011-02-06 22:18:02
【问题描述】:

代码在 fopen() 处阻塞:

<?php 
  ini_set('display_errors',1);
  error_reporting(E_ALL);
  $fp = fopen("/path/to/file/some_file.txt","a") or die("can't open file");
  fwrite($fp,"some text");
  fclose($fp);
?>

结果网页显示:

“警告:fopen(/path/to/file/some_file.txt) [function.fopen]:无法打开流:第 5 行 /var/www/html/test.php 中的权限被拒绝 无法打开文件”

我尝试使用文件权限,但无济于事。我用chown apache:apache some_file.txt 更改了用户/组,并用chmod 755 some_file.txt 更改了权限。以下是ls -l /path/to/file/的相关结果:

-rwxr-xr-x 1 apache apache 0 Apr 12 04:16 some_file.txt

【问题讨论】:

  • try chmod 777 some_file.txt 只是为了确定——也许您的 apache 服务器没有以 apache 用户身份运行?另外,我假设您的 chown 和 chmod 命令指的是 some_file.txt 而不是 test.php?您对 test.php 的写权限与它是否可以读/写 some_file.txt 无关
  • 是的,chown 和 chmod 命令是在 some_file.txt 上完成的,我只是搞砸了我的问题。谢谢,现在修好了。当我回到工作岗位时,我会尝试使用 777 或 666 更安全一些,但我当然不想为我要写入的每个文件都这样做。

标签: php apache file-io permissions fopen


【解决方案1】:

您确定apache 是实际运行您的PHP 的用户?`

并且:确保apache 用户可以访问文件系统中的some_file.txt,并且它不会被some_file.txt 以上目录的某些访问限制所阻止。

【讨论】:

  • 我不确定 apache 是不是用户,这只是一个有根据的猜测,因为我看到 apache 存在。我想尝试检查apache是​​否可以读取文件。但是,当我尝试 su apache 时,它​​告诉我“此帐户当前不可用”。想法?
  • 我的 apache 进程由 www-data 运行,这是在 ubuntu linux 中。如果您在 linux 上运行服务器,请键入 sudo ps aux |更不用说弄清楚谁在运行什么。
【解决方案2】:

"a" 表示要追加,需要和写入一样的权限。

每个人都需要至少 666 个权限才能写入。或者将文件所有者更改为服务器组(Ubuntu 上的 www-data)。并设置所需的权限。

这里是Permission calculator

如果这没有帮助,请检查safe_mode

【讨论】:

    【解决方案3】:

    在修复错误之前,最好知道要修复哪个错误。
    在脚本顶部添加这些行,然后重试

    ini_set('display_errors',1);
    error_reporting(E_ALL);
    

    PHP 会告诉你,有什么问题

    【讨论】:

    • 谢谢。这证实这是权限问题。
    【解决方案4】:

    不要忘记,即使 Apache 被授予读取文件的权限,您也必须授予 Apache 对所有父目录的访问权限。

    /path/to/file/
    /path/to
    /path
    

    都需要授予 Apache 至少“读取”权限。

    【讨论】:

    • 我也有类似的问题。现在的问题是我们如何授予 apache 特定路径的权限?
    猜你喜欢
    • 2017-10-07
    • 2011-05-16
    • 2013-11-27
    • 2016-03-08
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多