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

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

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

    傳統(tǒng)的 fopen 方法

    fopen 方法可能是以前的 C 和 C++ 程序員最熟悉的,因為如果您使用過這些語言,那么它們或多或少都是您已掌握多年的工具。對于這些方法中的任何一種,通過使用 fopen(用于讀取數(shù)據(jù)的函數(shù))的標準方法打開文件,然后使用 fclose 關閉文件,如清單 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ù)進行分解。有效地執(zhí)行以下步驟:

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

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

    fopen

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

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

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

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

    feof

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

    fclose

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

    fgets

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

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

    $string = fgets($file_handle, 81);

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

    fread

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

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

    穩(wěn)定

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

    貼心

    項目群及時溝通

    專業(yè)

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

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質開發(fā)
    • 返回頂部
    国产精品宅男在线观看| 亚洲精品福利网站| 夜夜爽一区二区三区精品| 国产精品久久久久国产精品三级 | 亚洲国产精品综合福利专区| 亚洲国产精品成人久久| 99久久这里只有精品| 国产精品女同一区二区久久| 欧洲精品码一区二区三区免费看| 日韩在线一区二区| 国产亚洲蜜芽精品久久| 国产精品成年片在线观看| 成人免费无码精品国产电影| 无码国产精品久久一区免费 | 国产亚洲午夜精品| 精品日韩二区三区精品视频| 国产乱码精品一区二区三区 | 久9视频这里只有精品8| 国产精品大全国产精品| 99国产精品无码| 98视频精品全部国产| 99国产精品永久免费视频| 92国产精品午夜福利| 美国发布站精品视频| 国内精品伊人久久久久妇| 亚洲精品日韩一区二区小说| 亚洲精品日韩一区二区小说| 亚洲精品无码人妻无码| 人妻少妇精品无码专区动漫| 国产人妻777人伦精品hd| 精品国产线拍大陆久久尤物| 精品久久天干天天天按摩| 国产精品青青青高清在线观看| 国产精品久久久久久网站| 国产99久久亚洲综合精品| 国产日韩成人亚洲丁香婷婷 | 中文字幕精品视频在线观| 国内精品久久久久影院网站| 中文精品人人永久免费| 手机看片在线精品观看| 国产精品亚洲片在线观看不卡|