- 相關(guān)推薦
用PHP讀取文件的正確方法
處理諸如 PHP 之類的現(xiàn)代編程語言的樂趣之一就是有大量的選項(xiàng)可用。PHP 可以輕松地贏得 Perl 的座右銘“There‘s more than one way to do it”(并非只有一種方法可做這件事),尤其是在文件處理上。但是在這么多可用的選項(xiàng)中,哪一種是完成作業(yè)的最佳工具?當(dāng)然,實(shí)際答案取決于解析文件的目標(biāo),因此值得花時(shí)間探究所有選項(xiàng)。以下是小編為大家搜索整理的用PHP讀取文件的正確方法,希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
傳統(tǒng)的 fopen 方法
fopen 方法可能是以前的 C 和 C++ 程序員最熟悉的,因?yàn)槿绻褂眠^這些語言,那么它們或多或少都是您已掌握多年的工具。對于這些方法中的任何一種,通過使用 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)驗(yàn)的程序員都熟悉這些函數(shù),但是讓我對這些函數(shù)進(jìn)行分解。有效地執(zhí)行以下步驟:
1、打開文件。$file_handle 存儲(chǔ)了一個(gè)對文件本身的引用。
2、檢查您是否已到達(dá)文件的末尾。
3、繼續(xù)讀取文件,直至到達(dá)文件末尾,邊讀取邊打印每行。
4、關(guān)閉文件。
記住這些步驟,我將回顧在這里使用的每個(gè)文件函數(shù)。
fopen
fopen 函數(shù)將創(chuàng)建與文件的連接。我之所以說“創(chuàng)建連接”,是因?yàn)槌舜蜷_文件之外,fopen 還可以打開一個(gè) URL:
$fh = fopen("http://127.0.0.1/", "r");
這行代碼將創(chuàng)建一個(gè)與以上頁面的連接,并允許您開始像讀取一個(gè)本地文件一樣讀取它。
注: fopen 中使用的 “r” 將指示文件以只讀方式打開。由于將數(shù)據(jù)寫入文件不在本文的討論范圍內(nèi),因此我將不列出所有其他選項(xiàng)。但是,如果是從二進(jìn)制文件讀取以獲得跨平臺(tái)兼容性,則應(yīng)當(dāng)將 “r” 更改為 “rb”。稍后您將看到這樣的示例。
feof
feof 命令將檢測您是否已經(jīng)讀到文件的末尾并返回 True 或 False。清單 1 中的循環(huán)將繼續(xù)執(zhí)行,直至您達(dá)到文件“myfile”的末尾。注:如果讀取的是 URL 并且套接字由于不再有任何數(shù)據(jù)可以讀取而超時(shí),則 feof 也將返回 False。
fclose
向前跳至清單 1 的末尾,fclose 將實(shí)現(xiàn)與 fopen 相反的功能:它將關(guān)閉指向文件或 URL 的連接。執(zhí)行此函數(shù)后,您將不再能夠從文件或套接字中讀取任何信息。
fgets
在清單 1 中回跳幾行,您就到達(dá)了文件處理的核心:實(shí)際讀取文件。fgets 函數(shù)是處理第一個(gè)示例的首選武器。它將從文件中提取一行數(shù)據(jù)并將其作為字符串返回。在那之后,您可以打印或者以別的方式處理數(shù)據(jù)。清單 1 中的示例將精細(xì)地打印整個(gè)文件。
如果決定限制處理數(shù)據(jù)塊的大小,您可以將一個(gè)參數(shù)添加到 fgets 中限制最大行長度。例如,使用以下代碼將行長度限制為 80 個(gè)字符:
$string = fgets($file_handle, 81);
回想 C 中的““0”字符串末尾終止符,將長度設(shè)為比實(shí)際所需值大一的數(shù)字。因而,如果需要 80 個(gè)字符,則以上示例使用 81。應(yīng)養(yǎng)成以下習(xí)慣:只要對此函數(shù)使用行限制,就添加該額外字符。
fread
fgets 函數(shù)是多個(gè)文件讀取函數(shù)中惟一一個(gè)可用的。它是一個(gè)更常用的函數(shù),因?yàn)橹鹦薪馕鐾ǔ?huì)有意義。事實(shí)上,幾個(gè)其他函數(shù)也可以提供類似功能。但是,您并非總是需要逐行解析。
這時(shí)就需要使用 fread。fread 函數(shù)與 fgets 的處理目標(biāo)略有不同:它趨于從二進(jìn)制文件(即,并非主要包含人類可閱讀的文本的文件)中讀取信息。由于“行”的概念與二進(jìn)制文件無關(guān)(邏輯數(shù)據(jù)結(jié)構(gòu)通常都不是由新行終止),因此您必須指定需要讀入的字節(jié)數(shù)。
$fh = fopen("myfile", "rb");
$data = fread($file_handle, 4096);
以上代碼將讀取 4,096 字節(jié) (4 KB) 的數(shù)據(jù)。注:不管指定多少字節(jié),fread 都不會(huì)讀取超過 8,192 個(gè)字節(jié) (8 KB)。
用PHP讀取文件的正確方法(1)
【用PHP讀取文件的正確方法】相關(guān)文章:
php讀取文件內(nèi)容的方法09-14
PHP中讀取大文件實(shí)現(xiàn)方法詳解09-23
php使用file-get-contents讀取大文件的方法07-12
PHP快速讀取大文件的例子10-24
php使用fgetcsv讀取csv文件出現(xiàn)亂碼的解決方法10-22
php使用fgetcsv讀取csv文件出現(xiàn)亂碼09-23
Java的jar文件中讀取數(shù)據(jù)的方法09-27
php文件鎖怎么用07-03