了解如何使用 PHP 的各種文件函數。查看諸如 fopen、fclose 和 feof 之類的基本文件函數;了解諸如 fgets、fgetss 和 fscanf 之類的讀取函數。並且發現用一兩行代碼處理整個文件的函數。
讓我們算一算有多少種方法
處理諸如 PHP 之類的現代編程語言的樂趣之一就是有大量的選項可用。PHP 可以輕松地贏得 Perl 的座右銘“There's more than one way to do it”(並非只有一種方法可做這件事),尤其是在文件處理上。但是在這麼多可用的選項中,哪一種是完成作業的最佳工具?當然,實際答案取決於解析文件的目標,因此值得花時間探究所有選項。
傳統的 fopen 方法
fopen 方法可能是以前的 C 和 C++ 程序員最熟悉的,因為如果您使用過這些語言,那麼它們或多或少都是您已掌握多年的工具。對於這些方法中的任何一種,通過使用 fopen(用於讀取數據的函數)的標准方法打開文件,然後使用 fclose 關閉文件,如清單 1 所示。
清單 1. 用 fgets 打開並讀取文件
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
}
fclose($file_handle);
雖然大多數具有多年編程經驗的程序員都熟悉這些函數,但是讓我對這些函數進行分解。有效地執行以下步驟:
打開文件。$file_handle 存儲了一個對文件本身的引用。
檢查您是否已到達文件的末尾。
繼續讀取文件,直至到達文件末尾,邊讀取邊打印每行。
關閉文件。
記住這些步驟,我將回顧在這裡使用的每個文件函數。
fopen
fopen 函數將創建與文件的連接。我之所以說“創建連接”,是因為除了打開文件之外,fopen 還可以打開一個 URL:
$fh = fopen("http://127.0.0.1/", "r");
這行代碼將創建一個與以上頁面的連接,並允許您開始像讀取一個本地文件一樣讀取它。
注: fopen 中使用的 "r" 將指示文件以只讀方式打開。由於將數據寫入文件不在本文的討論范圍內,因此我將不列出所有其他選項。但是,如果是從二進制文件讀取以獲得跨平台兼容性,則應當將 "r" 更改為 "rb"。稍後您將看到這樣的示例。
feof
feof 命令將檢測您是否已經讀到文件的末尾並返回 True 或 False。清單 1 中的循環將繼續執行,直至您達到文件“myfile”的末尾。注:如果讀取的是 URL 並且套接字由於不再有任何數據可以讀取而超時,則 feof 也將返回 False。
fclose
向前跳至清單 1 的末尾,fclose 將實現與 fopen 相反的功能:它將關閉指向文件或 URL 的連接。執行此函數後,您將不再能夠從文件或套接字中讀取任何信息。