程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 用PHP讀取文件的正確方法(1)

用PHP讀取文件的正確方法(1)

編輯:關於PHP編程

Roger McCoy是使用過包括C、Java、JavaScript、Perl、PHP 和Microsoft Visual Basic 在內的多種編程語言的開發人員。他有五年的PHP應用程序開發經驗,但是他作為呼叫中心行業內的技師可能更著名。

讓我們算一算有多少種方法

處理諸如 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);

雖然大多數具有多年編程經驗的程序員都熟悉這些函數,但是讓我對這些函數進行分解。有效地執行以下步驟:

1、打開文件。$file_handle 存儲了一個對文件本身的引用。
2、檢查您是否已到達文件的末尾。
3、繼續讀取文件,直至到達文件末尾,邊讀取邊打印每行。
4、關閉文件。

記住這些步驟,我將回顧在這裡使用的每個文件函數。

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 的連接。執行此函數後,您將不再能夠從文件或套接字中讀取任何信息。

fgets

在清單 1 中回跳幾行,您就到達了文件處理的核心:實際讀取文件。fgets 函數是處理第一個示例的首選武器。它將從文件中提取一行數據並將其作為字符串返回。在那之後,您可以打印或者以別的方式處理數據。清單 1 中的示例將精細地打印整個文件。

如果決定限制處理數據塊的大小,您可以將一個參數添加到 fgets 中限制最大行長度。例如,使用以下代碼將行長度限制為 80 個字符:

$string = fgets($file_handle, 81);

回想 C 中的“”字符串末尾終止符,將長度設為比實際所需值大一的數字。因而,如果需要 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)。

1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved