0

我正在尝试为我一直在使用的系统编写安装脚本。该脚本将一些默认文件从一个位置复制到另一个位置,并为它们创建各种文件夹。我有这方面的工作,但唯一的问题是当我通过 FTP 登录时,我无法编辑或删除 PHP 为我移动的文件。

如果我通过终端登录,我可以很高兴地“sudo chmod -R 777 [dir]”并且问题消失了,所以问题是:

我在 PHP 端缺少什么?

我的权限功能如下:

function set_permissions($file) 
{
  if (file_exists($file)):
    chmod($file,0777);  
  endif;                
}

我知道将权限设置为 777 并不是 100% 理想的,但我只是想达到在 PHP 为我移动文件之后能够通过 FTP 编辑文件的结果。

希望我已经足够清楚了。这让我感到困惑,所以任何帮助表示赞赏:)

汤姆

编辑: 整个过程如下:

mkdir($root_dir, 0777);
mkdir($images_dir, 0777);
if (!copy($orig_logo, $new_logo)) 
{
  echo "failed to copy $orig_logo...";
} 
  // see function above for details on set_permissions...       
  $this->set_permissions($new_logo);
}

(所有路径也是正确的)

编辑:我通过终端登录之前的文件具有以下权限:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css

我登录并更改后的文件有:

-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css

该系统是一个内容管理系统,允许您通过管理区域编辑和删除文件,奇怪的是,这很好用。似乎这些文件以某种方式被Apache以外的任何其他人锁定了......但文件信息表明并非如此。这很奇怪...

4

3 回答 3

1

您确定文件存在还是路径正确?

于 2009-08-26T00:23:50.010 回答
1

听起来您的目录也需要写权限。

于 2009-08-26T00:26:31.087 回答
1

如果您可以chmod -R 777通过终端解决问题,那么在您运行之前 PHP 设置的权限是什么chmod???显然不是 777。我猜你的 PHP 代码实际上并没有改变权限。

查看您的代码,如果文件不存在,您的权限更改功能可能会静默失败 - 例如,您为其提供了无效的文件名(错误的文件夹?错误的相对路径?)但您无法分辨,因为您的set_permissions()功能太害怕警告你了。您应该将其重写如下:

function set_permissions($file) 
{
  if (!file_exists($file))
    throw new Exception(__FUNCTION__ . "() file doesn't exist! '$file'");
  chmod($file,0777);
  error_log("chmod 777 $file"); // debug
}

这使您可以看到正在发生的事情,如果您的文件名不正确,您肯定会注意到。

于 2009-08-26T00:38:48.567 回答