PHP: fopen() Permission denied PHP: fopen() Permission denied php php

PHP: fopen() Permission denied


This issue can also be a result of having SELinux enabled. This can be solved using:

chown -R apache:apache /var/www/html/directory_to_writechcon -R -t httpd_sys_content_t /var/www/html/directory_to_writechcon -R -t httpd_sys_rw_content_t /var/www/html/directory_to_write

You can find more about the contexts at 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

Edit:

You can find the old explanation at https://web.archive.org/web/20150927091100/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.htmlor 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

However if you are on anything like Redhat 8 or newer, you might want to follow https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_selinux/configuring-selinux-for-applications-and-services-with-non-standard-configurations_using-selinux#customizing-the-selinux-policy-for-the-apache-http-server-in-a-non-standard-configuration_configuring-selinux-for-applications-and-services-with-non-standard-configurations


try

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

as

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

is most likely looking in another directory


I have been receiving the same error "failed to open stream. permission denied"when trying to write a file on the server using PHP.I tried everything on the internet to fix the error. I changed ownership of the files,directories and sub-directories on the server to "apache", I did a chmod 777 on all the files, directories, sub-directories, I ran restorecon -R, I ran chcon unconfined_u:object_r:httpd_user_content_t:s0 on all the files, but the only thing that seemed to work is turning SELinux off completely.

I finally resolved the issue. The problem lay in the boolean parameters used by SELinux.I performed the following command to get a list of all the booleans related to httpd.

$ getsebool -a | grep httpd

This gave a list of about 36 parameters.

I painfully went and turned on every boolean using the setsebool command until the "failed to open stream. permission denied" error went away.

When I turned "on" the httpd_unified boolean, the error went away!!When I turned it "off", the error came back!!