13

我有一个以前工作的 PHP 脚本,它能够创建一个目录mkdir

$webfolder = "/var/www/html/images/user";
mkdir($webfolder, 0770);

我对文件夹的权限设置进行了一些更改,/var/www/html/images现在是:

drwxrwx---. myself apache system_u:object_r:httpd_sys_content_t:s0 images

我认为以前此文件夹归apache. 但是既然apache作为一个用户组拥有读、写和执行的全部权限,我想知道为什么它不能在其中创建一个文件夹。使用mkdir产生一个false布尔值。

问题是由于目录所有权还是有其他原因?请注意,我使用的是 PHP 5.4 版。

错误日志添加:

[Mon Dec 17 11:12:34 2012] [error] [client 127.0.0.1] PHP Warning: mkdir(): Permission denied in /var/www/html/upload on line 33, referer: https://mywebsite. com/referer

4

2 回答 2

34

答案就在眼前,但由于我对 SELinux 的不熟悉,我很想念它。

SELinux 上下文类型应该设置为,httpd_sys_content_rw_t而不是httpd_sys_content_t这样文件夹对于 apache 来说是可读和可写的。使用以下命令以递归方式更改上下文:

# chcon -R -t httpd_sys_content_rw_t /var/www/html/images

好伤心。希望它可以帮助其他遇到此问题的人。

于 2012-12-18T12:53:20.233 回答
0

在 CentOS7 VM 上,使用 PHP5.4.16/Apache 2.4.6/mariadb 5.5.44,smarty 模板目录不可写以生成已编译的模板文件,并给出以下错误(在 /var/log/httpd/error_log 中):

[Thu Mar 31 12:36:08.201383 2016] [:error] [pid 13094] [client 192.168.212.65:52204] PHP Fatal error:  Smarty error: unable to write to $compile_dir '/var/www/html/app1/templates_c'. Be sure $compile_dir is writable by the web server user. in /var/www/html/app1/libs/smarty/Smarty.class.php on line 1093

因此 PHP 应用程序显示空白屏幕。

chmod 777 templates_c也不起作用;但根据@Question Overflow 的建议,此 VM 上的 Web 根权限确实解决了问题。

我不得不执行:

[root@appserver html]# chcon -R -t httpd_sys_content_rw_t /var/www/html

当然,templates_c & 缓存应该归 apache 用户所有:

drwxr-xr-x.  2 apache apache     6 Mar 31 12:56 templates_c
drwxr-xr-x.  2 apache apache     6 Mar 31 12:56 cache

花了半天多时间,偶然发现了这个。谢谢

于 2016-03-31T07:52:55.333 回答