php chmod()没有更改权限

时间:2013-03-02 01:38:07

标签: php permissions file-permissions chmod writable

我在使用图片上传脚本时遇到了问题。

我知道有数百个相同的问题,但我找不到那个对我有用的问题。

$upload_dir = "images/postcards/";
chmod($upload_dir, 777);
if (is_writable($upload_dir)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}

这总是返回文件“不可写”

我尝试将chmod设置为0777-rwxrwxrwx。但结果总是一样的。任何想法?

4 个答案:

答案 0 :(得分:10)

目录必须由调用脚本的用户拥有(如果您在apache / * NIX设置中运行脚本,则通常为www-dataapachehttpd。用户无法对其不拥有的目录设置777权限。

请参阅chmod()manual上的注释:

  

当前用户是运行PHP的用户。可能不是   您用于普通shell或FTP访问的同一用户。模式可以是   仅在大多数系统上由拥有文件的用户更改

答案 1 :(得分:2)

首先,通过在代码顶部添加两行来打开PHP error_report,看看是否有来自chmod的错误:

ini_set('display_errors', true);
error_reporting(E_ALL);

确保您的WebServer具有该目录的权限,我的猜测是WebServer没有权限。

答案 2 :(得分:0)

我已经遇到了同样的问题,您可以通过此代码更改文件的权限:

<?php
$ftp_details['ftp_user_name'] = 'your ftp username';
$ftp_details['ftp_user_pass'] = 'your ftp password';
$ftp_details['ftp_root'] = '/public_html/';
$ftp_details['ftp_server'] = 'ftp' . $_SERVER['HTTP_HOST'];
function ftp_chmod($path, $mod, $ftp_details) {
  extract($ftp_details);
  $conn_id = ftp_connect($ftp_server);
  $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// try to chmod $path directory
  if (ftp_site($conn_id, 'CHMOD ' . $mod . ' ' . $ftp_root . $path) !== false) {
    $success = true;
  }
  else {
    $success = false;
  }

  ftp_close($conn_id);
  return $success;
}
?>

我没有运行此代码,但我认为它没关系,它会对你有所帮助。 告诉我你的问题是否得到解决

答案 3 :(得分:0)

我使用chmod遇到了类似的麻烦,尽管该文件归apache所有:apache(webserver user)。在我的情况下,SELinux正在阻碍,禁用它使这一点变得清晰:

  

sudo setenforce 0

chmod正常工作。现在要弄清楚如何为这种情况制作SELinux例外...... (当然,别忘了启用SELinux)