我在使用图片上传脚本时遇到了问题。
我知道有数百个相同的问题,但我找不到那个对我有用的问题。
$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
。但结果总是一样的。任何想法?
答案 0 :(得分:10)
目录必须由调用脚本的用户拥有(如果您在apache / * NIX设置中运行脚本,则通常为www-data
,apache
或httpd
。用户无法对其不拥有的目录设置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)