【问题标题】:PHP set permissions and delete folder - filesPHP设置权限和删除文件夹-文件
【发布时间】:2020-08-07 05:41:33
【问题描述】:

我在 Centos 上使用 PHP 7.3 + nginx。我的应用程序包含一个已安装的文件夹,其中包含来自另一台服务器的文件。一旦我对它们没有任何用处,我需要删除这些文件。我使用下面的代码删除了这些文件。代码工作正常,但其中一些文件是在创建时有更多限制(只读),我的应用程序只有在我手动设置 chmod -R 775 时才能删除它们。

function remove_dir($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir"){
           remove_dir($dir."/".$object); 
        }else {
      unlink   ($dir."/".$object);
    }
      }
    }
    reset($objects);
    rmdir($dir);
    return true;
  }
  return false;
}

我试过这个:

$command = "chmod -R 775 ".$folder;
exec($command);

但总是以:

警告:[pool www] child n 对 stderr 说:“chmod:更改 '/folder/file' 的权限:不允许操作”

是否可以设置这些权限,或者我需要创建那些我想删除的文件并设置正确的权限?

我试过这个,但它也给了我权限错误。

$command = "rm -rf {$local}";
exec($command, $output, $status);

进入标准错误:“rm: cannot remove 'folder/file': Permission denied”



编辑:所以我阅读了很多建议,我发现最好不要通过 webapp 执行此操作,即使它只是在我公司内部运行。我创建了一个脚本,我将通过 crontab 运行。解决我的问题,没有任何安全问题。

【问题讨论】:

  • 这取决于运行 PHP 进程的 uid 相对于您尝试删除的文件/文件夹的文件权限。我想当您手动 chmod 文件时,您使用的 uid 比您的 PHP 进程使用的更有特权。
  • 是的,在我的服务器控制台上,我以 root 身份运行
  • 检查给你权限被拒绝错误的 PHP 进程的 uid。我确定它不会以 root 身份运行(因此会引发权限被拒绝错误)。您可以尝试提升 PHP 进程的权限,但我不建议这样做。我认为您必须找到另一种解决方法,或者继续手动更改文件。
  • 我运行 shell_exec('whoami'),它返回:nginx。你知道如何添加更多权限吗?
  • 试试 shell_exec('id -u');

标签: php nginx permissions chmod


【解决方案1】:

更改权限示例:

<?php 
$fn = './test.txt';
chmod($fn, 0777);

请注意,我们在 777 之前放置了 0 以要求 PHP 将其解释为八进制数。

【讨论】:

  • 我试过这个,但我也给出了权限问题
猜你喜欢
  • 2013-12-22
  • 2012-01-06
  • 2014-09-28
  • 1970-01-01
  • 2015-10-18
  • 2018-02-26
  • 1970-01-01
  • 2023-03-28
  • 2017-10-05
相关资源
最近更新 更多