2012-12-04 25 views
2

對於學校任務,我必須用PHP編寫腳本。它必須創建一個名稱爲數組並將數組寫入文件。然後它必須刪除數組,讀取文件中的名稱並回顯它們。PHP中的文件IO不工作

這不起作用:

<?php 
    $names = array("Name 1", "Name 2", "Name 3", "Name 4", "Name 5"); 
    $filename = "names.txt"; 
    $handle = fopen($filename, "wb+"); //open as read and write 
    $string = implode("\r\n", $names); //name on each line 
    fwrite($handle, $string); //write line 

    $names = array(); //empty array 
    print_r($names); //print empty array 
    $string = fread($handle, filesize($filename)); //read file 
    $names = explode("\r\n", $string); //lines to array 
    foreach ($names as $name) { 
     echo("<br>\n$name"); 
    } 
    fclose($handle); 
?> 

但這個工程:

<?php 
    $names = array("Name 1", "Name 2", "Name 3", "Name 4", "Name 5"); 
    $filename = "names.txt"; 
    $handle = fopen($filename, "wb"); //open as write 
    $string = implode("\r\n", $names); //name on each line 
    fwrite($handle, $string); //write line 
    fclose($handle); //close 

    $handle = fopen($filename, "r"); //open as read 
    $names = array(); //empty array 
    print_r($names); //print empty array 
    $string = fread($handle, filesize($filename)); //read file 
    $names = explode("\r\n", $string); //lines to array 
    foreach ($names as $name) { 
     echo("<br>\n$name"); 
    } 
    fclose($handle); 
?> 

我不知道爲什麼,當我關閉並重新打開文件時,它的工作原理。任何幫助,將不勝感激。

+0

第二個腳本是正確的,而不是第一個。 – Lobo

+1

使用'file_get_contents'和'file_put_contents'工作要容易得多,而不是使用整個fread/filesize/fclose ordeal。 –

+0

@ N.B。感謝您的建議,但該章是關於fopen,fwrite等 – P1nGu1n

回答

8

所有你需要的是使用fwrite()時,因爲重新啓動文件指針:

fwrite()通過手柄字符串的內容寫入到文件流指向。

  • 長度字節已被讀出
  • EOF(文件的結束)達到
  • 分組變爲可用或發生插座超時(用於網絡流)
  • 如果流讀緩衝和它並不代表一個普通的文件,最多一次讀取的字節數等於塊大小(通常爲8192);取決於先前緩衝的數據,返回的數據的大小可能大於塊大小。

如果你看看fread()

fread()最多讀取由句柄引用文件指針長度字節。只要these conditions的一個滿足閱讀站:在文件因此沒有任何的

因此,在當時您呼叫fread($handle, filesize($filename));你已經會被顯示出來。

要解決此只是用fseek重啓指針回到文件

實例的開頭:

fseek($handle, 0); 

Yon't不需要關閉文件..你的第一個代碼將工作完全

編輯

您也可以你rewind來自PHP DOC

將句柄的文件位置指示符設置爲文件流的開頭。

rewind($handle); 
+0

感謝它的工作!我現在更瞭解如何閱讀和寫作的作品。 – P1nGu1n

+0

很高興知道我能幫上忙 – Baba

-2

第二個腳本是正確的。原因是,如果您打開一個文件進行寫入,則無法使用該文件進行讀取,因此您必須關閉該文件並在讀取時重新打開該文件。

+2

-1。假。 w +是[閱讀和寫作](http://php.net/manual/en/function.fopen.php),但是當寫入完成時,文件指針位於EOF處,並且沒有任何可讀的內容。 –