我正在尝试为我一直在研究的系统编写安装脚本。该脚本将一些默认文件从一个位置复制到另一个位置,并为它们创建各种文件夹。我有点干预,但唯一的问题是当我通过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 之外的任何其他人...但文件信息建议不然。这很奇怪......
答案 0 :(得分:1)
您确定文件存在或路径是否正确?
答案 1 :(得分:1)
听起来你的目录也需要写权限。
答案 2 :(得分:1)
如果您可以chmod -R 777
通过终端来解决问题,那么在运行chmod
之前PHP设置的权限是什么??? 显然不是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
}
这可以让你看到发生了什么,如果没有正确的文件名,你肯定会注意到。