【问题标题】:Recursive Chmod not working PHP递归 Chmod 不工作 PHP
【发布时间】:2013-04-25 09:23:50
【问题描述】:

我有下面的 PHP 函数,它应该递归地 chmod 我服务器上的一个目录。

由于某种原因它无法正常工作 - 我知道该目录的路径是正确的,因为我已经使用一个快速脚本对其进行了测试,该脚本只打印出该目录中的文件。

$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);
}

有什么想法吗?

【问题讨论】:

  • 只是一个想法...我正在处理服务器的 /tmp 目录是否重要?所以,我想知道这是否是一个权限问题?例如,如果我在一个终端,我必须sudo 吗?如果是这样,我该如何从 php 脚本中解决这个问题?
  • 好的,我刚刚检查过,正在执行此脚本的文件的所有者是“nginx”,而我尝试 chmod 的文件/文件夹的用户是“root”。我想我需要以某种方式更改用户?不幸的是,这对我来说是全新的,所以我不知道从这里去哪里

标签: php function chmod


【解决方案1】:
chmod($Path.'/'.$File, 0777);

您必须输入 chmod 的完整路径

【讨论】:

  • 感谢您的快速回复...所以,目前我将 $root_tmp 中的目录传递给它,该目录与运行函数的位置有关。我已将其更改为$root_tmp = '/tmp/mixtape2,但仍然无法正常工作。 mixtape2 目录中有子文件夹有关系吗?
  • “不工作”是什么意思?它没有设置 chmod 什么的?使用 var_dump(chmod(..));另外,来自文档:“启用安全模式后,PHP会检查您将要操作的文件或目录是否与正在执行的脚本具有相同的UID(所有者)。此外,您不能设置SUID,SGID和粘性位。”
  • 是的,它没有设置 chmod。如果我添加 var_dump 那么它会给我 'bool(false) ' 根据我对原始问题的评论,我认为这可能是用户权限问题
【解决方案2】:

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

【讨论】:

  • 感谢您的回复...我刚刚在 Google 上搜索并遇到了 chown 功能。我尝试了一个标准的chown($root_tmp, 'nginx');,在我的脑海中应该将用户更改为前面提到的执行文件的用户。然而,这并没有奏效。然后我也尝试了exec('chown nginx /tmp/mixtape2');,但也没有用。我再次假设这是因为我从网络服务器用户运行这些脚本。关于从这里去哪里的任何指示?
  • 您需要实际登录服务器,并使用文件管理器或命令行更改这些文件。 "chown -R nginx:nginx FILENAME" 应该可以解决问题。
  • 问题在于,这是一个 tmp 目录,每次我们在网站上运行某个功能时都会创建文件。通过命令行执行它只会chown 现在存在的文件......创建的任何新文件都将再次由“root”创建,不是吗?这就是为什么我一直在寻找 PHP 解决方案的原因,因为我将内置到一个函数中,该函数将 chown's、chmod's 然后取消链接文件。
  • 对...您尝试过执行“sudo chmod”吗?您可以编辑 /etc/sudoers 文件以授予您的网络服务器用户 sudo 权限而无需密码。但是,这当然是一条危险的路……
  • 我确实考虑过给予 sudo 访问权限,但正如你所说,这并不是最好的选择......也许我最好还是为这个任务寻找一个 cronjob?
猜你喜欢
  • 2018-01-22
  • 2012-11-02
  • 2011-01-04
  • 1970-01-01
  • 2016-01-19
  • 2011-05-22
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
相关资源
最近更新 更多