PHP无法使用mkdir创建目录

时间:2012-12-17 05:25:19

标签: php apache permissions mkdir selinux

我有一个以前工作的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版。

添加错误日志:

  

[2012年12月17日星期一11:12:34] [错误] [客户端127.0.0.1] PHP警告:   mkdir():第33行/ var / www / html / upload中的权限被拒绝,   referer:https://mywebsite.com/referer

2 个答案:

答案 0 :(得分:30)

答案正盯着我,但由于我对SELinux的不熟悉,我想念它。

SELinux上下文类型应设置为httpd_sys_content_rw_t而不是httpd_sys_content_t,以便该文件夹对于apache都是可读写的。递归更改上下文是使用以下命令完成的:

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

好悲伤。希望它可以帮助其他人遇到这个。

答案 1 :(得分: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权限确实解决了这个问题。

我必须执行:

[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

花了半天多的时间,遇到了这个。 感谢