php chmod()不更改权限
我的图片上传脚本有问题 我知道有数百个相同的问题,但我还没有找到一个适合我的php chmod()不更改权限,php,permissions,file-permissions,chmod,writable,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和-rwxrwx
$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
和-rwxrwx
。但结果总是一样的。有什么想法吗?目录必须由调用脚本的用户拥有(通常是www-data
、apache
或httpd
,如果您在apache/*NIX设置中运行脚本)。用户无法在其不拥有的目录上设置777权限
请参见chmod()上的注释:
当前用户是运行PHP的用户。可能不是
您用于正常shell或FTP访问的同一用户。模式可以是
仅由在大多数系统上拥有文件的用户更改
首先,通过在代码顶部添加两行来打开PHP错误报告,查看是否有来自chmod的错误:
ini_set('display_errors', true);
error_reporting(E_ALL);
确保您的Web服务器具有访问该目录的权限,我猜Web服务器没有权限 我已经遇到了相同的问题。您可以通过以下代码更改文件的权限:
<?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;
}
?>
我没有运行这段代码,但我认为它是可以的,它将帮助您。
告诉我你的问题是否解决了 我在使用chmod时遇到了类似的问题,尽管该文件由apache:apache(webserver用户)拥有。在我的例子中,SELinux妨碍了我,禁用它清楚地表明了这一点: sudo set0 chmod也能起作用。现在,我们来弄清楚如何为这种情况创建SELinux异常。。。
(当然,不要忘记启用SELinux)如果是十进制
777
则不正确。您应该始终使用0
在此处检查。改进您的答案,使其更全面。这是针对我的具体情况的最佳答案,因为我为文件设置了正确的用户和组。同样关于服务器配置的主题,我还发现为我的Web服务器设置一个新的umask
是最好的选择:omg非常感谢错误报告。我当时正在拼命安装Chrome Logger之类的东西,以获取php的错误报告。