91亚洲精华国内精华精华液_国产高清在线精品一区不卡_精品特级一级毛片免费观看_欧美日韩中文制服有码_亚洲精品无码你懂的网站369

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

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

處理諸如 PHP 之類的現(xiàn)代編程語言的樂趣之一就是有大量的選項可用。PHP 可以輕松地贏得 Perl 的座右銘“There's more than one way to do it”(并非只有一種方法可做這件事),尤其是在文件處理上。但是在這么多可用的選項中,哪一種是完成作業(yè)的最佳工具?當(dāng)然,實際答案取決于解析文件的目標(biāo),因此值得花時間探究所有選項。

傳統(tǒng)的 fopen 方法

fopen 方法可能是以前的 C 和 C++ 程序員最熟悉的,因為如果您使用過這些語言,那么它們或多或少都是您已掌握多年的工具。對于這些方法中的任何一種,通過使用 fopen(用于讀取數(shù)據(jù)的函數(shù))的標(biāo)準(zhǔn)方法打開文件,然后使用 fclose 關(guān)閉文件,如清單 1 所示。

清單1:用fgets打開并讀取文件

$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $line;
}
fclose($file_handle);

雖然大多數(shù)具有多年編程經(jīng)驗的程序員都熟悉這些函數(shù),但是讓我對這些函數(shù)進(jìn)行分解。有效地執(zhí)行以下步驟:

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

記住這些步驟,我將回顧在這里使用的每個文件函數(shù)。

fopen

fopen 函數(shù)將創(chuàng)建與文件的連接。我之所以說“創(chuàng)建連接”,是因為除了打開文件之外,fopen 還可以打開一個 URL:

$fh = fopen("http://127.0.0.1/", "r");

這行代碼將創(chuàng)建一個與以上頁面的連接,并允許您開始像讀取一個本地文件一樣讀取它。

注: fopen 中使用的 “r” 將指示文件以只讀方式打開。由于將數(shù)據(jù)寫入文件不在本文的討論范圍內(nèi),因此我將不列出所有其他選項。但是,如果是從二進(jìn)制文件讀取以獲得跨平臺兼容性,則應(yīng)當(dāng)將 “r” 更改為 “rb”。稍后您將看到這樣的示例。

feof

feof 命令將檢測您是否已經(jīng)讀到文件的末尾并返回 True 或 False。清單 1 中的循環(huán)將繼續(xù)執(zhí)行,直至您達(dá)到文件“myfile”的末尾。注:如果讀取的是 URL 并且套接字由于不再有任何數(shù)據(jù)可以讀取而超時,則 feof 也將返回 False。

fclose

向前跳至清單 1 的末尾,fclose 將實現(xiàn)與 fopen 相反的功能:它將關(guān)閉指向文件或 URL 的連接。執(zhí)行此函數(shù)后,您將不再能夠從文件或套接字中讀取任何信息。

fgets

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

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

$string = fgets($file_handle, 81);

回想 C 中的“\0”字符串末尾終止符,將長度設(shè)為比實際所需值大一的數(shù)字。因而,如果需要 80 個字符,則以上示例使用 81。應(yīng)養(yǎng)成以下習(xí)慣:只要對此函數(shù)使用行限制,就添加該額外字符。

fread

fgets 函數(shù)是多個文件讀取函數(shù)中惟一一個可用的。它是一個更常用的函數(shù),因為逐行解析通常會有意義。事實上,幾個其他函數(shù)也可以提供類似功能。但是,您并非總是需要逐行解析。

這時就需要使用 fread。fread 函數(shù)與 fgets 的處理目標(biāo)略有不同:它趨于從二進(jìn)制文件(即,并非主要包含人類可閱讀的文本的文件)中讀取信息。由于“行”的概念與二進(jìn)制文件無關(guān)(邏輯數(shù)據(jù)結(jié)構(gòu)通常都不是由新行終止),因此您必須指定需要讀入的字節(jié)數(shù)。

穩(wěn)定

產(chǎn)品高可用性高并發(fā)

貼心

項目群及時溝通

專業(yè)

產(chǎn)品經(jīng)理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽

堅持

10年專注高端品質(zhì)開發(fā)
  • 返回頂部