PHP:fopen()权限被拒绝

T_t*_*T_t 21 php permissions

我对这段代码感到困惑:

test.php的:

fopen('test.txt','a+');
Run Code Online (Sandbox Code Playgroud)

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

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

的test.txt:

-rwxrwxrwx. 1 jt jt     87 10?  7 20:58 test.txt
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

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

mis*_*ink 17

此问题也可能是启用SELinux的结果.这可以使用以下方法解决:

chown -R apache:apache /var/www/html/directory_to_write
chcon -R -t httpd_sys_content_t /var/www/html/directory_to_write
chcon -R -t httpd_sys_rw_content_t /var/www/html/directory_to_write
Run Code Online (Sandbox Code Playgroud)

您可以在https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Confined_Services/sect-Managing_Confined_Services-The_Apache_HTTP_Server-Types.html找到有关上下文的更多信息.


Phi*_*ord 15

尝试

fopen('/path/to/file/test.txt','a+');
Run Code Online (Sandbox Code Playgroud)

fopen('test.txt','a+');
Run Code Online (Sandbox Code Playgroud)

很可能在另一个目录中查找


kwa*_*tts 8

当尝试使用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命令打开每个布尔值,直到"无法打开流.权限被拒绝"错误消失.

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

  • 其命令是: sudo setebool -P httpd_unified 1 :) (2认同)

War*_*ior 6

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

  • +1并考虑检查file_exists也! (2认同)