PHP无法使用mkdir创建目录

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 警告:在 /var/www/html/upload 的第33行中被禁止了访问权限,引用者:https://mywebsite.com/referer


1
/var/www/html/images/user 文件夹是否存在?如果存在,它的权限是什么?为了测试目的,您可以将父文件夹的所有者更改为 apache,然后尝试是否可行? - hakre
@hakre,是SELinux给我带来了问题。请看我的回答。感谢您的耐心和时间 :) - Question Overflow
2个回答

35
答案就在我的眼前,但由于我不熟悉SELinux,所以错过了它。
应该将SELinux上下文类型设置为httpd_sys_content_rw_t,而不是httpd_sys_content_t,这样文件夹对于apache既可读又可写。使用以下命令递归更改上下文:
# chcon -R -t httpd_sys_content_rw_t /var/www/html/images

太好了。希望这能帮助那些偶然遇到这个问题的人。


嗨,我在这里遇到了同样的问题... 我正在尝试在CodeIgnter中创建项目并在Ubuntu 14.14 Lts中开发.. 你能否更详细地解释一下我需要采取哪些步骤来修复此错误???为了给您提供一些额外的信息:绝对路径是/opt/lampp/htdocs/www/my-app/public/uploads.. 基本上,我正在尝试让每个已登录的用户上传文件到uploads文件夹,并创建相册文件夹(这将使用php完成)以存储照片.. - ltdev
你可以查看我创建的主题以获取更多信息:http://stackoverflow.com/questions/32861261/codeigniter-message-mkdir-permission-denied-on-ubuntu,http://forum.codeigniter.com/thread-63136.html,http://askubuntu.com/questions/679844/mkdir-permission-denied-to-create-folders-with-php。 - ltdev

0
在 CentOS7 虚拟机上,使用 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 & cache 文件夹应该属于 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

在花费了半天的时间后,终于找到了这个。谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接