2010-12-10 113 views
0

我有一個主要的腳本,我刪除(取消鏈接)一個文件。然後,在稍後包含在該主腳本中的一些腳本中,我會寫入該文件(與該文件名稱相同的文件,因爲它現在應該已經消失)。PHP操作順序有什麼問題?

發生什麼事是,在主腳本運行後,該文件被刪除。正如在寫入文件後發生的取消鏈接操作一樣。當我在主腳本中截斷文件(通過用空字符串覆蓋文件)並稍後寫入該文件時,會發生同樣的想法。結果是,該文件是空的(就像截斷文件發生在寫入後,但代碼中的字面順序顛倒了)。

這裏有什麼問題?或者如果不是這樣,它爲什麼會這樣工作?

編輯:

第一(在主腳本):

unlink($config['directory'].'logs/info.txt'); 

然後(在一些包括腳本):

$f = fopen($config['directory'].'logs/info.txt', "w"); 
fwrite($f, "Text"); 
fclose($f); 

我想可能會有一些常見的錯誤,你可以指出(如不調用fclose或其他)。因此,我可能必須仔細研究這個問題(但是我相信在這個文件上沒有其他操作,因爲我使用了文件的一個唯一名稱,同樣的事情發生了)。

+1

請問您可以發佈您的PHP代碼? – 2010-12-10 08:21:17

+0

fopen()的第二個參數不是文件名,而是訪問類型:'r','w'等。您可以在http://es2.php.net/manual/en/上找到完整的參考資料。 function.fopen.php – 2010-12-10 08:38:39

回答

0

以後如何寫入文件? file_put_contents()是一種方法(我幾乎不再使用其他任何東西),但是如果使用fopen/fwrite並忘記可能導致這樣問題的fclose。

0

如果沒有真正看到代碼就不可能給出明確的答案,但有一種可能性是客戶端發生資源請求在後臺發生,導致主請求完成後文件被刪除。

嘗試在腳本部分使用堆棧跟蹤來刪除文件以確定它如何再次被調用;見debug_backtracedebug_print_backtrace

0

只是一個想法,但你試過刷新輸出?您可以使用fflush($f);強制php將所有緩衝數據寫入文件。

當然,你不應該真的需要這個 - 實際上用'w'標誌打開它會截斷文件。你確定它正在打開嗎?也許嘗試這樣的事情:

$f = fopen($config['directory'].'logs/info.txt', "w"); 
if($f === false)die('File opening failed!'); 
fwrite($f, "Text"); 
fflush($f); 
fclose($f);