2009-08-26 105 views
0

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

如果我通过终端我可以高兴地“命令搭配chmod -R 777 [DIR]”登录名和问题消失了,所以问题是:

我缺少的是在PHP结束了吗?

我的权限功能如下:

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

我知道这是不是100%比较理想的权限设置为777,但我只是想实现的是能够通过FTP来编辑文件的结果,在PHP将它们移动给我之后。

希望我已经清楚了。现在,这是我百思不得其解,所以任何帮助表示赞赏:)

汤姆

编辑: 整个过程如下:

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 ...之外的任何其他人,但文件信息表明否则。这很奇怪...

回答

1

听起来像你的目录也需要写入权限。

+0

对不起,我应该提到我移动文件的目录也具有应用于它们的权限。 在将文件移动到目录之前,我使用以下命令创建目录: mkdir($ default_dir,0777); 希望这会有所帮助... – Tisch 2009-08-26 00:31:17

+0

没有有效的ACL? – 2009-08-26 11:08:07

+0

对不起厚厚? ACL的? – Tisch 2009-08-28 08:26:36

1

确定文件存在或路径正确吗?

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 
} 

这可以让你看到发生了什么,你一定会发现,如果你没有得到你的文件名是正确的。

+0

我通过终端登录前的文件具有以下权限: -rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01: 45个base.css 的文件后,我登录并修改了: -rwxrwxrwx 1 WWW的数据WWW的数据2739 2009-08-26 01:45 base.css 所以响应,我必须确认PHP正常运行。还值得注意的是,如果我使用我的系统通过浏览器详细说明文件......它会高兴地删除它们,我也可以使用我的系统对它们进行编辑。 – Tisch 2009-08-26 00:51:17