2010-10-07 83 views
13

我感到困惑与此代码:PHP:fopen()函数权限被拒绝

test.php的:

fopen('test.txt','a+'); 

当我执行它,我得到一个错误:

Warning: fopen(test.txt): failed to open stream: 
    Permission denied in /var/www/html/yuelu3/mobile/text.php on line 2 

测试.txt:

-rwxrwxrwx. 1 jt jt  87 10月 7 20:58 test.txt 

问题在哪里?

非常感谢!我发现了问题,我使用FC13,因为SELinux的保护,有些操作被拒绝。所以,我只需要摆脱保护。

+4

更多关于上下文将任何机会是位于一个NFS安装目录中的文件:这可以使用解决了吗? – SirDarius 2010-10-07 13:46:27

+3

你还检查了文件所在目录的权限吗? – 2010-10-07 13:47:21

+1

php是以'jt'用户身份运行吗?如果您要打开的文件是由其他用户拥有的,那也可能是一个问题。 – methode 2010-10-07 13:53:44

回答

5

使用fopen($_SERVER['DOCUMENT_ROOT'].'test.txt','a+');

+2

+1并考虑检查file_exists也! – Fenton 2010-10-07 14:46:34

13

尝试

fopen('/path/to/file/test.txt','a+'); 

fopen('test.txt','a+'); 

在另一个目录

4

路径是最有可能寻找总是会引起问题试图打开文件时。当您尝试打开文件时,避免出现任何问题的简单方法是检查您处于的目录以及您拨打电话的位置。

echo getcwd(); 

创建一个简单的PHP页面并打个电话打印当前目录。将PHP页面放到与文件相同的目录中,它会告诉你文件夹的正确路径,然后添加/filename.xxx。

4

检查文件的SELinux上下文模式,以确保它被设置为:httpd_user_content_t

...如果不是的话,使用:

chcon httpd_user_content_t test.txt 

...纠正问题。

6

当尝试在使用PHP的服务器上编写文件时,我一直收到同样的错误“未能打开流。权限被拒绝”。 我试图在互联网上修复错误。我将服务器上的文件,目录和子目录的所有权更改为“apache”,我在所有文件,目录,子目录上执行了“chmod 777”,我运行了“restorecon -R”,我运行了“chcon unconfined_u:object_r:所有文件中的“httpd_user_content_t:s0”,但唯一看起来奏效的就是完全关闭SELinux。

我终于解决了这个问题。问题在于SELinux使用的布尔参数。 我执行了以下命令以获取与httpd相关的所有布尔值列表。

$ getsebool -a | grep httpd

这给出了大约36个参数的列表。

我痛苦地去了,打开使用setsebool命令每一个布尔直到“未能打开流。Permission denied”错误走了。

当我打开httpd_unified布尔值时,错误消失了! 当我把它关掉时,错误回来了!

+0

非常感谢。我只是将所有目录和子目录的chmod更改为777,对我来说工作得很好! – 2016-11-03 07:40:14