PHP 无法使用 mkdir 创建目录

Posted

技术标签:

【中文标题】PHP 无法使用 mkdir 创建目录【英文标题】:PHP unable to create a directory with mkdir 【发布时间】:2012-12-04 05:28:10 【问题描述】:

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

【问题讨论】:

文件夹/var/www/html/images/user 是否存在?如果是,有哪些权限?您能否 - 出于测试目的 - 将父文件夹的所有者更改为 apache 并尝试它是否有效? @hakre,是 SELinux 给我带来了问题。看我的回答。感谢您的耐心和时间:) 【参考方案1】:

在 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

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

【讨论】:

【参考方案2】:

答案就在眼前,但因不熟悉 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 .. 基本上我要做的是每个登录用户在上传文件夹中上传文件并创建专辑文件夹(这将使用 php 完成)存储照片.. 您可以查看我创建的主题以获取更多信息***.com/questions/32861261/…、forum.codeigniter.com/thread-63136.html、askubuntu.com/questions/679844/…

以上是关于PHP 无法使用 mkdir 创建目录的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 在mac中写php无法用mkdir创建目录的一种解决办法

hadoop 2.6.2,mkdir:无法创建代理提供程序 null

无法使用makefile创建多个目录

mkdir:无法创建目录:协议错误:Virtualbox 共享文件夹

Spark saveAsTextFile() 导致 Mkdirs 无法为一半目录创建

php mkdir() 权限被拒绝 mac