2013-03-02 110 views
5

我遇到了图片上传脚本的问题。php chmod()不更改权限

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

$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。但结果总是一样的。有任何想法吗?

+1

如果是小数点'777',那么这是不正确的。你应该总是在这里使用'0'来检查[chmod](http://php.net/manual/en/function.chmod.php)。 – 2013-03-02 03:44:44

回答

9

该目录必须由调用脚本的用户拥有(如果您在apache/* NIX安装程序中运行脚本,通常为www-data,apachehttpd)。用户不能对它不拥有的目录设置777权限。

参见使用chmod(注)manual

当前用户是执行PHP的用户。它可能不是 用于普通shell或FTP访问的用户。只有在大多数系统上拥有文件的用户才可以更改 模式

+0

同意''目录必须属于用户'。 – 2013-03-02 03:37:03

2

首先,通过增加对你的代码的前两位线开PHP error_report,看看是否有来自搭配chmod来一个错误:

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

确保您的Web服务器有权限到该目录,我的猜测是WebServer没有权限。

+0

omg非常感谢错误报告的事情。我正在抨击我的头靠在墙上试图安装Chrome Logger等东西来获取php的错误报告。 – user124384 2015-07-25 17:11:52

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; 
} 
?> 

我没有运行此代码,但我认为这是好的,它会帮助你的。 告诉我你的问题是否已解决。

0

我使用chmod时遇到了类似的问题,尽管该文件归apache所有:apache(webserver user)。在我的情况的SELinux是凑了过来,禁用它使这个明确:

须藤setenforce 0

而且CHMOD作品。现在开始计算如何为这种情况制定一个SELinux例外...... (当然,别忘了启用SELinux)

+0

改进您的答案,使其更全面。 – 2014-07-15 08:28:54

+0

这是我的具体情况的最佳答案,因为我为该文件设置了正确的用户和组。 另外在服务器配置的主题上,我还发现为我的网络服务器设置一个新的'umask'是最好的选择:http://serverfault.com/a/384922/185510 – RibeiroBreno 2017-03-10 20:28:39