2010-01-23 152 views
2

我期待與PHP函數的fwrite()的一個問題is_writable()返回false

$filename = 'rss.xml'; 

if (file_exists($filename)) { 
    echo "The file $filename exists"; 
} 

if (is_writable($filename)) { 
    $fp = fopen($filename, 'w'); 
    fwrite($fp, $feed); 
    fclose($fp); 
} 
else{ 
    echo '<br />not writable..'; 
    if(!is_readable($filename)){ 
    echo ' and not readable!'; 
    } 
} 

一旦執行該腳本返回:

The file rss.xml exists 
not writable.. 

CHMOD爲rss.xml是755和安全模式已關閉。

我在(MT)mediatemple.com上(DV)主辦,該腳本工作正常,當我在(GS)解決方案託管。

我找不到什麼是錯=/

+0

如果刪除文件,PHP可以重新創建嗎? (當前文件可能由不同的用戶擁有,而PHP正在運行。) – 2010-01-23 11:06:53

回答

-1

CHMOD 0755意味着只有文件所有者才能寫入(組和其他人可以讀取和執行)。您應該將CHMOD更改爲0775甚至0777,具體取決於PHP的用戶/組。

+8

恕我直言,設置777是一個安全問題。人們應該避免讓程序員設置文件權限的託管者777.我是對的嗎? – Dan 2010-01-23 12:06:00

+0

必須同意@Dan - 這是一個糟糕的解決方案。 – 2010-01-23 12:28:39

+0

你可以從這個答案中刪除綠色複選標記嗎?這不是正確的解決方案,人們絕對不應該在他們的生產服務器上這樣做。 – pfrenssen 2014-11-20 16:16:12

3

755表示:

  • rwx:讀,寫,執行業主
  • r-x:讀取,執行對組
  • r-x:讀取,執行別人的

因此,每個人都可以閱讀(並執行)該文件,但只有所有者才能寫入該文件。

也許擁有該文件的用戶不運行PHP腳本的人嗎?即該文件可能屬於任何人,而你的腳本是由Apache的用戶(通常www-data運行?


第一個想法可能是刪除文件,讓腳本嘗試重新創建它;如果它重新創建正確(這意味着阿帕奇有需要含有它的directoy write權利),它應該能夠對其進行修改,在那之後。

否則,您應該嘗試將write的權限設置爲other - 如果您的腳本由另一個用戶運行,而不是該文件的所有者; chmod o+w rss.xml應該做的伎倆。

0

755意味着文件的所有者可以修改它,而不是其他任何人。所有者可能不是網絡服務器,但你自己(你的FTP帳戶?),所以PHP不能修改它。試着給它更廣泛的執行。從775開始,如果這不起作用,請嘗試777.

有一些網絡主機與您的FTP帳戶一樣運行網絡服務器,因此他們沒有獲得有關文件權限的支持問題,但在我認爲這是一個很大的安全漏洞。我認爲Mediatemple做正確的事情,不要將Web服務器作爲您的FTP帳戶運行。

0

編輯:我忽略了,正如Pascal Martin和其他人指出的那樣,755可能意味着該文件合法不可寫,並且您可能必須777或更改所有者。我將這個答案留在原地,以防萬一設置正確,並且is_writable()仍然返回false,這正是我所假設的。

奇數。有關於is_writable User Contributed Notes的簡短討論。對於在那裏發佈的人,切換到PHP 5解決了它(雖然我懷疑這是一個服務器/ PHP /哪個進程作爲哪個用戶問題運行)。

你可以嘗試什麼:

  • 找出用戶PHP運行與使用posix_getuid()
  • 更改您要寫信給到精確的用戶文件的擁有者(不僅僅是組)
  • 如果它有效,那麼它可能真的是一些小故障,你可能不得不考慮嘗試一個fopen()並且如果它失敗的話就截獲錯誤信息。

當然:是否該文件實際上fwrite()能夠繞過檢查?

0

在不同hostings PHP運行和訪問文件或者作爲

OWNER

集團

世界

第一種變體最適合你安全。

它的話,你應該設置文件的權限644,在最後一種情況 - 666

爲什麼要設置777,如果你只存儲數據就在那裏可執行文件?

0

製作一個文件夾,用於保存帶有0777權限的文件,然後將文件放在低權限級別0644中。因此,每個機構都可以訪問該文件夾,但並非每個人都可以更改文件(0644) =我找到了最好的解決方案。 其他較不安全的解決方法是不要製作文件夾,只是將您的文件權限更改爲666或者某些人更喜歡777 =不是一個好的安全解決方案