2011-06-22 214 views
7

當保存一個文件的時候,文件的權限會被放到一個不存在的地方,最初被創建爲新文件。文件權限和CHMOD:如何在創建文件時在PHP中設置777?

現在,這一切順利,保存的文件似乎有模式644

爲了使文件保存爲模式777,我必須在這裏更改些什麼?

非常感謝任何提示,線索或答案。我認爲的代碼是與此有關我已經包括:

/* write to file */ 

    self::writeFileContent($path, $value); 

/* Write content to file 
* @param string $file Save content to wich file 
* @param string $content String that needs to be written to the file 
* @return bool 
*/ 

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    return true; 
} 
+2

請注意,0777模式是**危險**。請參閱http://stackoverflow.com/questions/2338641/in-a-php-apache-linux-context-why-exactly-is-chmod-777-dangerous – 2011-06-22 00:54:27

+0

@Phoenix謝謝。我葡萄牙0766就足夠了(需要允許所有的寫入權限)。那個更好嗎? – Sam

+1

0766更好;這將防止任意代碼執行。該文件是否需要**世界**可寫,或只要例如Apache可以寫入文件就足夠了?你有一組需要能夠寫這些文件的應用程序嗎?如果你讓它們作爲同一組運行並設置0764模式呢? – 2011-06-22 01:05:13

回答

18

PHP有一個內置的叫bool chmod(string $filename, int $mode)

http://php.net/function.chmod

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 
    chmod($file, 0777); //changed to add the zero 
    return true; 
} 
+8

_不要使用777,這是一個_decimal_數字,沒有像你想要的:-) – paxdiablo

+3

@paxdiablo謝謝!注意和編輯 – thescientist

+0

這是一個安全風險嗎?如果文件權限是777,那麼攻擊者可以使用「PUT」方法將文件上傳到系統中?我錯了嗎?根據你的回答,我會使用你的解決方案。 – Hasan

4

你只需要與chmod()手動設置所需的權限功能:

private function writeFileContent($file, $content){ 
    $fp = fopen($file, 'w'); 
    fwrite($fp, $content); 
    fclose($fp); 

    // Set perms with chmod() 
    chmod($file, 0777); 
    return true; 
} 
+1

請參閱我對科學家的評論 - 正確的面具是** 0777 **不是777. – paxdiablo

+1

@paxdiablo已作出更改。我花了整整一天的時間在unix命令行上,並習慣於脫離特殊位。 –

2

如果要改變現有文件的權限,使用chmod(更改模式):

$itWorked = chmod ("/yourdir/yourfile", 0777); 

如果你希望所有新文件有一定的權限,你需要考慮你的設置umode。這是一個對標準模式應用默認修改的過程設置。

這是一個減法的。那麼,我的意思是umode022會給你默認權限755777 - 022 = 755)。

但是您應該仔細考慮這兩個這些選項。使用該模式創建的文件將完全不受保護。

+1

'0755'。不是'755'。 –