PHP 无法使用 mkdir 创建目录



我有一个以前工作的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 中被拒绝的权限, 推荐人: https://mywebsite.com/referer

答案就在我面前,但由于我对 SELinux 的不熟悉,我错过了它。

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

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

好悲伤。希望它能帮助其他遇到这种情况的人。

在 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的建议,此虚拟机上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

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

最新更新