mkdir():权限被拒绝

时间:2013-07-03 14:03:06

标签: php apache yii permissions

我的服务器上的所有文件都有777。 PHP 5.4(无safe_mode)

网站适用于其他服务器。这是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                 }

在chown之后ls -l,没有帮助

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

4 个答案:

答案 0 :(得分:4)

确保:

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

如果没有问题但仍然无效,我会这样做:

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

希望这有帮助。

答案 1 :(得分:3)

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

setenforce 0

答案 2 :(得分:1)

检查SELinux并关闭它..现在可以了!

答案 3 :(得分:1)

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