用PHP讀取檔案的正確方法
處理諸如 PHP 之類的現代程式語言的樂趣之一就是有大量的選項可用。PHP 可以輕鬆地贏得 Perl 的座右銘“There‘s more than one way to do it”(並非只有一種方法可做這件事),尤其是在檔案處理上。但是在這麼多可用的選項中,哪一種是完成作業的最佳工具?當然,實際答案取決於解析檔案的目標,因此值得花時間探究所有選項。以下是小編為大家搜尋整理的用PHP讀取檔案的正確方法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!
傳統的 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);
雖然大多數具有多年程式設計經驗的程式設計師都熟悉這些函式,但是讓我對這些函式進行分解。有效地執行以下步驟:
1、開啟檔案。$file_handle 儲存了一個對檔案本身的引用。
2、檢查您是否已到達檔案的末尾。
3、繼續讀取檔案,直至到達檔案末尾,邊讀取邊列印每行。
4、關閉檔案。
記住這些步驟,我將回顧在這裡使用的每個檔案函式。
fopen
fopen 函式將建立與檔案的連線。我之所以說“建立連線”,是因為除了開啟檔案之外,fopen 還可以開啟一個 URL:
$fh = fopen("", "r");
這行程式碼將建立一個與以上頁面的連線,並允許您開始像讀取一個本地檔案一樣讀取它。
注: fopen 中使用的 “r” 將指示檔案以只讀方式開啟。由於將資料寫入檔案不在本文的討論範圍內,因此我將不列出所有其他選項。但是,如果是從二進位制檔案讀取以獲得跨平臺相容性,則應當將 “r” 更改為 “rb”。稍後您將看到這樣的示例。
feof
feof 命令將檢測您是否已經讀到檔案的末尾並返回 True 或 False。清單 1 中的迴圈將繼續執行,直至您達到檔案“myfile”的末尾。注:如果讀取的是 URL 並且套接字由於不再有任何資料可以讀取而超時,則 feof 也將返回 False。
fclose
向前跳至清單 1 的末尾,fclose 將實現與 fopen 相反的功能:它將關閉指向檔案或 URL 的連線。執行此函式後,您將不再能夠從檔案或套接字中讀取任何資訊。
fgets
在清單 1 中回跳幾行,您就到達了檔案處理的`核心:實際讀取檔案。fgets 函式是處理第一個示例的首選武器。它將從檔案中提取一行資料並將其作為字串返回。在那之後,您可以列印或者以別的方式處理資料。清單 1 中的示例將精細地列印整個檔案。
如果決定限制處理資料塊的大小,您可以將一個引數新增到 fgets 中限制最大行長度。例如,使用以下程式碼將行長度限制為 80 個字元:
$string = fgets($file_handle, 81);
回想 C 中的““0”字串末尾終止符,將長度設為比實際所需值大一的數字。因而,如果需要 80 個字元,則以上示例使用 81。應養成以下習慣:只要對此函式使用行限制,就新增該額外字元。
fread
fgets 函式是多個檔案讀取函式中惟一一個可用的。它是一個更常用的函式,因為逐行解析通常會有意義。事實上,幾個其他函式也可以提供類似功能。但是,您並非總是需要逐行解析。
這時就需要使用 fread。fread 函式與 fgets 的處理目標略有不同:它趨於從二進位制檔案(即,並非主要包含人類可閱讀的文字的檔案)中讀取資訊。由於“行”的概念與二進位制檔案無關(邏輯資料結構通常都不是由新行終止),因此您必須指定需要讀入的位元組數。
$fh = fopen("myfile", "rb");
$data = fread($file_handle, 4096);
以上程式碼將讀取 4,096 位元組 (4 KB) 的資料。注:不管指定多少位元組,fread 都不會讀取超過 8,192 個位元組 (8 KB)。
用PHP讀取檔案的正確方法(1)