2013-08-28 59 views
2

也許我不明白如何php的chmod()函數應該工作,但我遇到它返回TRUE(表示成功),但實際上並沒有修改權限。PHP的chmod返回true爲成功,但實際上並沒有更改權限

我正在使用已上傳到我的Web服務器的tmp目錄的文件。

$fn = $value["tmp_name"]; 
    $fps = fileperms($fn); 

    $testMsg .= "file permissions are $fps\n";   
    $testMsg .= "(which is " . substr(sprintf('%o', $fps), -4) . ")\n"; 

    $arr = posix_getpwuid(fileowner($fn)); 
    $testMsg .= "file owner is " . $arr["name"] . "\n"; 

    $testMsg .= "running as: " . trim(shell_exec('whoami')) . "\n"; 


    //can i chmod it? 
    $didChmod = chmod($fn, 0644); 
    $testMsg .= "chmod: $didChmod\n"; 
    $fps = fileperms($fn); 
    $testMsg .= "NEW file permissions are $fps\n";   
    $testMsg .= "(which is " . substr(sprintf('%o', $fps), -4) . ")\n"; 

從上面的輸出是:

file permissions are 33152 
(which is 0600) 
file owner is www-data 
running as: www-data 
chmod: 1 
NEW file permissions are 33152 
(which is 0600) 

正如你所看到的,CHMOD()報道的成功還沒有更改權限。

由於

+0

它是否在支持權限的文件系統上?有時有網絡共享等問題 – Anigel

+0

@Anigel - 是的,它是Linux。 –

+0

目錄上的權限/所有者是什麼?還有,如果你shell_exec的chmod而不是使用內置的PHP會發生什麼? – Anigel

回答

0

從手動

當前用戶是執行PHP的用戶。它可能不是 用於普通shell或FTP訪問的用戶。該模式可以是 ,只有在大多數系統上擁有該文件的用戶才能更改。

如果此腳本正在由網絡服務器運行(即通過瀏覽器訪問),則此PHP腳本將作爲錯誤的用戶運行。只有文件(或root)的所有者可以使用chmod,網絡服務器可能以www-data或其他方式運行,因此不具有chmod權限。

+0

爲什麼'trim(shell_exec ('whoami'))'作爲文件的所有者返回?看來,腳本**的所有者/執行者是**文件的所有者。 –

+1

我對結果的解釋與@ Kirk's相同 - php腳本以www-data的形式運行,它也是文件的所有者。所以應該有權限chmod該文件 –

相關問題