9

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

我知道有数百个相同的问题,但我还没有找到适合我的问题。

$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';
}

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

我尝试设置chmod0777-rwxrwxrwx。但结果总是一样的。有任何想法吗?

4

4 回答 4

13

该目录必须由调用脚本的用户拥有(通常www-dataapache或者httpd如果您在 apache/*NIX 设置中运行脚本)。用户不能对它不拥有的目录设置 777 权限。

请参阅 chmod()手册上的注释:

当前用户是运行 PHP 的用户。它可能与您用于正常 shell 或 FTP 访问的用户不同。在大多数系统上,只有拥有该文件的用户才能更改模式。

于 2013-03-02T01:40:54.653 回答
2

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

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

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

于 2013-03-02T01:58:28.630 回答
1

我在使用 chmod 时遇到了类似的问题,尽管该文件归 apache:apache (网络服务器用户)所有。在我的情况下,SELinux 阻碍了它,禁用它清楚地表明了这一点:

须藤 setenforce 0

并且 chmod 有效。现在开始弄清楚如何为这种情况创建一个 SELinux 异常......(当然,不要忘记启用 SELinux)

于 2014-07-15T08:23:36.573 回答
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;
}
?>

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

于 2013-07-10T16:31:49.730 回答