【问题标题】:mkdir(): Permission deniedmkdir():权限被拒绝
【发布时间】:2013-07-01 06:27:46
【问题描述】:

我的服务器上的所有文件都有 777。 PHP 5.4(无安全模式)

网站可以在其他服务器上运行。这是 Yii 框架

 mkdir(): Permission denied

/var/www/html/project/framework/web/CAssetManager.php(225)

213             return $this->_published[$path];
214         elseif(($src=realpath($path))!==false)
215         {
216             $dir=$this->generatePath($src,$hashByName);
217             $dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
218             if(is_file($src))
219             {
220                 $fileName=basename($src);
221                 $dstFile=$dstDir.DIRECTORY_SEPARATOR.$fileName;
222 
223                 if(!is_dir($dstDir))
224                 {
225                     mkdir($dstDir,$this->newDirMode,true);
226                     chmod($dstDir,$this->newDirMode);
227                 }

这里ls -l chown 之后,没有帮助

drwsrwsrwx.  2 apache apache    4096 июля   3 16:44 assets
drwxrwxrwx.  5 apache apache    4096 июня  10 14:52 bootstrap
drwxrwxrwx. 19 apache apache    4096 июля   3 16:04 framework
-rwxrwxrwx.  1 apache apache     326 июля   3 16:42 index.php
drwxrwxrwx. 10 apache apache    4096 июля   3 16:04 protected
drwxrwxrwx.  3 apache apache    4096 июня  20 13:28 soap
drwxrwxrwx.  3 apache apache    4096 июля   3 16:04 themes

【问题讨论】:

  • 您在尝试创建目录的目录上也需要 777,或者更改它的所有者。
  • 您还应该对文件和目录权限使用八进制表示。 0777 而不是 777
  • 它是 Yii 框架。我无法更改此代码.. 所有 /www/ 都有 777
  • 如果目录所有者不是运行脚本的网络服务器用户,即使在使用 777 之前,我也已经看到此失败。更改目录,使其归 Web 服务器用户所有(apache、nobody 或 www-data 等,具体取决于您的服务器),这通常可以解决您的问题。另一个原因是驱动器已满
  • 您能告诉我们ls -la 在父目录(以及该目录的父目录)中的结果吗?

标签: php apache yii permissions


【解决方案1】:

确保:

  • web 目录归 apache 用户所有。 (“ls -al”会告诉你)
  • 您要在其中创建的父目录也归该用户所有。
  • 父目录不是您没有写入权限的挂载
  • 您要创建的路径是正确的(var_dump($dstDir) 会告诉您)
  • $this->newDirMode 包含正确的权限值。 (如果您在 Windows 上运行,这将被忽略)

如果没有问题但仍然无法正常工作,我会这样做:

  • 让自己成为 apache 用户并尝试手动创建它(“sudo -u apache”,如果您的用户名是 apache)
  • 尝试在“mkdir($dstDir,$this->newDirMode,true);”中省略第三个参数'true'并依次创建所有目录
  • 检查日志(“/var/log/apache”是你的朋友)

希望这会有所帮助。

【讨论】:

  • 您的 /etc/apache2/apache2.conf 中定义了哪些用户? (搜索“用户”,然后搜索“组”)
  • 我认为,SELinux.. 其他域在 /var/www/html/ 中工作,但我在 SELinux 中没有任何信息
  • 你的 'ls -la' 告诉我这应该没问题 :( 手动创建目录有效吗?
【解决方案2】:

检查 SELinux 并关闭它。现在它可以工作了!

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
  • 请使用您问题上的编辑链接添加更多信息。 Post Answer 按钮应仅用于问题的完整答案。
【解决方案3】:

SELinux 可能是问题所在。尝试手动关闭它:

setenforce 0

【讨论】:

    【解决方案4】:

    SELinux 是我设置的罪魁祸首。谢谢提醒!

    【讨论】:

    • 权限和所有权也是一个问题。我的解决方案:chown -R apache basic/
    • chgrp -R apache basic/
    • chmod 755 递归地为您的 webroot 授予权限以及让我的工作,然后是“setenforce 0”和总是有用的“服务 httpd 重启”以防万一=)谢谢大家对此的帮助.期待玩 Yii 2.0
    猜你喜欢
    • 2016-08-24
    • 2012-08-13
    • 1970-01-01
    • 2023-03-22
    • 2018-03-19
    • 2021-12-20
    • 2015-12-03
    相关资源
    最近更新 更多