繁体   English   中英

PHP文件权限…使其“写”?

[英]PHP File Permissions… getting it “write”?

我正在尝试为我一直在使用的系统编写安装脚本。 该脚本将一些默认文件从一个位置复制到另一个位置,并为它们创建各种文件夹。 我有点想办法,但唯一的问题是,当我通过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以外的任何人隔离开了 ……但是文件信息表明不是这样。 这很古怪...

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

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

如果您可以通过终端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
}

这使您可以查看正在发生的情况,并且您一定会注意到如果您的文件名不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM