递归Chmod不工作PHP

问题描述:

我有下面的PHP函数,它应该递归地chmod其中一个dir在我的服务器上。递归Chmod不工作PHP

由于某种原因,它不工作 - 我知道该目录的路径是正确的,因为我用一个快速脚本测试它,只是打印出该目录内的文件。

$root_tmp = '/tmp/mixtape2'; 
chmod_r($root_tmp); 

function chmod_r($Path) { 
$dp = opendir($Path); 
while($File = readdir($dp)) { 
    if($File != "." AND $File != "..") { 
    if(is_dir($File)){ 
     chmod($File, 0777); 
     chmod_r($Path."/".$File); 
    }else{ 
     chmod($Path."/".$File, 0777); 
    } 
    } 
closedir($dp); 
} 

任何想法?

+0

只是一个想法...这是否有关系,我正在处理服务器的/ tmp目录的目录? 所以,我想知道如果这是一个权限问题? 例如,如果我在一个终端,我必须'sudo'?如果是这样,我怎么从一个PHP脚本去解决这个问题? – 2013-04-25 10:03:53

+0

好吧,我刚刚检查过,执行这个脚本的文件的所有者是'nginx',我试图chmod的文件/文件夹的用户是'root'。 我想我需要改变用户? 不幸的是,这对我来说都是新鲜的,所以我不知道该从哪里去 – 2013-04-25 10:55:54

chmod($Path.'/'.$File, 0777); 

你必须把完整路径和chmod

+0

感谢您的快速回复... 所以,目前我通过它$ dir $ root_tmp这是相对于哪里函数正在运行。 我把它改成了'$ root_tmp ='/ tmp/mixtape2',但它仍然不能正常工作。 mixtape2目录中有子文件夹是否重要? – 2013-04-25 09:44:12

+0

这是什么意思'不工作'?这不是设置chmod或什么的? use var_dump(chmod(..)); 另外,从文档:“当启用安全模式时,PHP会检查您要操作的文件或目录是否与正在执行的脚本具有相同的UID(所有者)。此外,您不能设置SUID, SGID和粘性位。“ – 2013-04-25 10:03:23

+0

是的,它没有设置chmod。 如果我添加'var_dump',那么它给了我'布尔(假)' 我想这可能是一个用户权限问题,根据我对原始问题的评论 – 2013-04-25 10:12:28

你的PHP脚本由Web服务器,它很可能有您的系统上它自己的用户执行。由于您尝试chmod()的文件属于root用户,因此您无权chmod它们。您需要首先进入文件系统,并将这些文件分配给正确的用户和组。

+0

感谢您的答复。 ..我刚刚搜索谷歌并遇到'chown'功能。 我试过了一个标准的chown($ root_tmp,'nginx');'在我的脑海里应该把用户改成前面提到的执行文件的用户。 但是,这没有奏效。 然后我也试过'exec('chown nginx/tmp/mixtape2');'这也没用。 我认为这是由于我从网络服务器用户运行这些脚本。 任何指向哪里可以从这里? – 2013-04-25 11:07:16

+0

您需要实际登录服务器,并使用文件管理器更改这些文件,使用命令行。 “chown -R nginx:nginx FILENAME”应该可以做到。 – Borniet 2013-04-25 11:09:56

+0

问题在于,这是一个tmp目录,每次我们在我们的网站上运行某个功能时都会创建文件。 通过命令行做到这一点只会“chown”现在存在的文件......任何新创建的文件都将由“root”创建,不是吗? 这就是为什么我正在寻找一个PHP解决方案,因为我打算建立一个chown的,chmod的功能,然后解除链接的文件。 – 2013-04-25 11:22:58