【问题标题】:fopen Permission denied on a file with 777 permissionsfopen 对具有 777 权限的文件的权限被拒绝
【发布时间】:2012-05-09 16:50:53
【问题描述】:

由于这篇文章的标题是不言自明的,我就直接跳到代码:

echo sprintf('%o', fileperms('test.txt'))."<br/>";

fopen("test.txt", "w");

有了这个我得到:

100777
fopen(test.txt): failed to open stream: Permission denied

有什么想法吗?

编辑:问题已解决:服务器上的访问控制列表配置不正确。

谢谢!

【问题讨论】:

  • 也许 SElinux 会阻止你?在文件上尝试ls -Z

标签: php fopen file-permissions


【解决方案1】:

我有同样的问题:文件夹是 777,但 fopen 不起作用。 fopen 表示权限拒绝。确保您的脚本具有“良好”权限。也许它会帮助你:

echo $dst, file_exists($dst) ? ' exists' : ' does not exist', "\n";
echo $dst, is_readable($dst) ? ' is readable' : ' is NOT readable', "\n";
echo $dst, is_writable($dst) ? ' is writable' : ' is NOT writable', "\n";
$fh = fopen($dst, 'w');
if ( !$fh ) {
    echo ' last error: ';
    var_dump(error_get_last());
}

【讨论】:

    【解决方案2】:

    我刚刚遇到了这个问题,不幸的是,错误消息没有提供任何关于实际原因的线索。我必须将 777 提供给包含在给出错误消息的文件中的类的文件。错误信息只说调用那个类的php文件,已经有777了。

    因此,检查错误消息中提到的文件(比如说 index.php),然后检查在该文件中实例化了哪些类(class-file.php、class-writer.php 等)。然后检查这些文件的权限(class-file.php,class-writer.php)。

    一旦我授予类文件的权限,它就可以正常工作。也许网络主机更改了他们的配置中的某些内容,因为直到几天前一切正常。

    【讨论】:

      【解决方案3】:

      我认为您可能对文件有写/读权限,但对文件夹没有。在您网站的公共根目录中尝试此操作,看看您是否可以读取或写入该文件。

      对于安全模式 (http://php.net/manual/en/function.fopen.php),php doc 的说明如下:

      注意:启用安全模式时,PHP 会检查目录是否位于 脚本正在运行的 UID(所有者)与脚本相同 正在执行。

      最后,您还需要确保 php 有权访问您尝试写入的文件夹。

      【讨论】:

      • 我看看是否开启了安全模式。至于文件夹,权限也设置为777。
      【解决方案4】:

      我认为您遇到的问题是文件所有权问题...您可以使用它来找出问题

      error_reporting(E_ALL);
      ini_set('display_errors','On');
      
      $file = "a.jpg";
      
      echo sprintf ( '%o', fileperms ( $file ) ), PHP_EOL;
      echo posix_getpwuid ( fileowner ( $file ) ), PHP_EOL; // Get Owner
      echo posix_getpwuid ( posix_getuid () ), PHP_EOL; // Get User
      
      if (is_file ( $file )) {
          echo "is_file", PHP_EOL;
          ;
      }
      
      if (is_readable ( $file )) {
          echo "is_readable", PHP_EOL;
          ;
      }
      
      if (is_writable ( $file )) {
          echo "is_readable", PHP_EOL;
      }
      
      fopen ( $file, "w" );
      

      【讨论】:

      • 感谢您的回答,在“is_writable”之前一切正常(该文件显然不是)。所有者和用户不一样,但这应该不是问题,因为每个用户都有这个文件的写权限......对吧?
      • 这可能是个问题......除非你有root用户......你很多人无法写入文件......尝试使用chownphp.net/manual/en/function.chown.php和chnage文件更改所有权chmodphp.net/manual/en/function.chmod.php的权限
      • 我会要求服务器管理员立即执行此操作。但是,如果所有用户都被允许写入文件,我仍然不明白为什么 PHP 不能写入文件:-s
      • 终于找到了解决办法:服务器上有ACL。
      猜你喜欢
      • 2018-09-07
      • 2011-11-10
      • 2011-08-01
      • 1970-01-01
      • 2020-09-30
      • 2012-06-08
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多