2013-03-02 140 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