9

所以,我有这个错误:

Warning: fopen(/path/to/test-in.txt) [function.fopen]: failed to open stream: Permission denied

ls -l在 is所在的目录中执行test-in.txt会产生以下输出:

-rw-r--r-- 1 $USER $USER 1921 Sep  6 20:09 test-in.txt
-rw-r--r-- 1 $USER $USER    0 Sep  6 20:08 test-out.txt

为了克服这个问题,我决定执行以下操作:

chgrp -R www-data /path/to/php/webroot

然后做了:

chmod g+rw /path/to/php/webroot

然而,当我运行我的 php5 脚本打开文件时,我仍然得到这个错误。为什么会这样?我已经通过 CGI 使用 LAMP 和 cherokee 尝试过这个,所以不可能是这样。

有某种解决方案吗?

编辑

我还要补充一点,我现在只是通过 localhost 进行开发。

更新 - PHPfopen()

$fullpath = $this->fileRoot . $this->fileInData['fileName'];

$file_ptr = fopen( $fullpath, 'r+' );

我还应该提到,如果可能的话,我想坚持使用 Cherokee。为 Apache/Cherokee 设置文件权限有什么意义?

4

2 回答 2

11

检查运行 PHP 的用户是否对文件路径的每个目录都具有“X”权限。
它将需要它来访问文件

如果您的文件是:/path/to/test-in.txt
您应该对以下内容拥有 X 权限:

  • /path
  • /path/to

并阅读权限/path/to/test-in.txt

于 2012-09-07T03:26:53.367 回答
2

此错误的另一个原因可能是文件目录不存在。

我只是在 fopen 之前添加 php 代码:

if(!file_exists(dirname($file))) 
    mkdir(dirname($file));

这帮帮我。

于 2016-02-16T09:46:52.997 回答