2015-04-23 23 views
-1

我想知道,爲什麼PHP file_put_contents()功能以奇怪的方式工作。爲什麼file_put_contents()不總是重寫一個文件?

我用它在一個循環中寫入一些日誌到文件,並且一切都很好(即使沒有指定標誌,也會附加新行)。當我再次啓動腳本時,它重新創建了我的文件。

從PHP文檔:

如果文件名不存在,則創建該文件。否則, 現有文件將被覆蓋,除非設置了FILE_APPEND標誌。

好的,所以我的問題是:爲什麼(當在一個循環中使用)它不覆蓋我的文件(當然沒有FILE_APPEND標誌)?錯誤或功能? :)

編輯:使用示例背景下,當發生這種情況:

$logFile = dirname (__FILE__) . '/example.log'; 
foreach($something1 as $sth1) { 
    $logData .= "Something\n"; 
    foreach($something2 as $sth2) { 
     if($something_else) { 
      $logData .= "Line: \t" . $sth2 . "\n"; 
      file_put_contents($logFile, $logData); 
     } 
    } 
} 
+0

[http://php.net/manual/en/function.file-put-contents.php]..this should help –

+0

如果它不覆蓋文件,那麼它會做什麼?顯示代碼的工作演示,並解釋你的期望和你實際得到的結果 –

+0

它的工作方式..當你設置file_append它會繼續追加。最常見的例子是創建的php錯誤日誌。但是,當您將其設置爲關閉時,文件內容每次都會更改。 –

回答

-1

OK,當你運行該腳本每次嘗試將日誌文件與random number or currentdate timestamp重命名,並嘗試將其保存在你的數據庫 這個當你再次運行該腳本,可以從數據庫取日誌文件名稱和更新它,當你需要

+3

這不是他要求的。 –

0

替代方式

<?php 

     $file = 'file.txt'; 

     $append = true; 

     if (file_exists($file)) { 

      if ($append) { 
       // append file 
       $file = fopen($file, 'a+'); 
      } else { 
       // overwrite file 
       $file = fopen($file, 'a'); 
      } 

     } else { 

      // create file 

      $file = fopen($file, 'a'); 

     } 

     fwrite($file, 'text'); 

     fclose($file); 

    ?> 

這裏是一個php fopen documentation

php file

並閱讀其相關主題

+0

嗨。感謝您的代碼。我知道如何解決它。我的問題是,爲什麼發生這種情況... – garbus

1

因爲它已經很清楚this link下的標誌內容(你應該讀)提到它清楚地表明,如果文件的文件名已經存在,將數據附加到文件而不是覆蓋它(設置此標誌時)。所以當FILE_APPEND的標誌被設置時,它會追加,當它不被重寫時。希望這對你有所幫助。

+0

問題是我用它錯誤的方式,它的工作原理,因爲我想[創建我的多行日誌文件,即使你不應該!]。然後我重新啓動了腳本並重新創建了文件[正確的行爲]。手動說,每次沒有標誌時應該重新創建瓷磚。這就是問題所在,爲什麼在一個循環中這個函數追加了沒有標誌的新行。 – garbus

+0

@garbus ..對不起,我無法重新創建你的場景。因爲我使用的那個沒有像記錄的那樣工作得很好。 –

+1

謝謝@ preeti-maurya提供此信息。我會嘗試在一個簡單的工作代碼中重新創建它。如果它會得到相同的結果,我將在未來粘貼它。 – garbus

相關問題