所以,我有这个错误:
Warning: fopen(/path/to/test-in.txt) [function.fopen]: failed to open stream: Permission denied
在ls -l
所在的目录中执行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和切诺基,所以不能这样。
有某种解决方案吗?
修改
我还要补充一点,我现在只是通过localhost进行开发。
更新 - PHP fopen()
行
$fullpath = $this->fileRoot . $this->fileInData['fileName'];
$file_ptr = fopen( $fullpath, 'r+' );
我还应该提一下,如果可能,我想坚持使用切诺基。关于为Apache / Cherokee设置文件权限的问题是什么?
答案 0 :(得分:7)
检查运行PHP的用户是否有" X"对文件路径的每个目录的权限 它需要它来访问文件
如果您的文件是:/path/to/test-in.txt
你应该拥有X权限:
/path
/path/to
和/path/to/test-in.txt
答案 1 :(得分:2)
此错误的另一个原因可能是文件目录不存在。
我只是在fopen之前添加php代码:
if(!file_exists(dirname($file)))
mkdir(dirname($file));
这帮助了我。