每天一個學習一個新的php函數(2) fgetcsv()/fgets()

文件讀寫是經常進行的一個動作,讀取文件的函數真是千千萬萬個,複雜的有,簡單的也有。最常用方便的有file_get_contents(),file_put_conents(),不需要進行打開文件,關閉文件的操作。
但是對超大文件進行讀取時,file_get_contents()會把內容都讀取進內存,造成內存溢出,最好是循環按行讀取。fgetcsv()用來讀取一行csv文件,fgets()用來讀取一樣普通文件。

fgetcsv()

csv,是一種特殊格式的表單文本文件,用‘,’分隔每個字段,用’\n’分隔每行。可以用fgetcsv讀取每個字段,或者用fgets讀取每行,然後用explode(‘,’,$data)分隔每行的數據。
fgetcsv — 從文件指針中讀入一行並解析 CSV 字段

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ‘,’ [, string $enclosure = ‘”’ [, string $escape = ‘\’ ]]]] )

參數

handle
接受一個由 fopen()、 popen() 或 fsockopen() 產生的有效文件指針。
length
必須大於 CVS 文件內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設爲 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。
delimiter
設置字段分界符(只允許一個字符)。
enclosure
設置字段環繞符(只允許一個字符)。
escape
設置轉義字符(只允許一個字符),默認是一個反斜槓。
注意:如果csv字段的字符長度大於設置的length,那麼函數每次只會讀取length長度的字符,並返回索引爲0的數組,當遇到分隔符’,’時,分隔符後的字符串會被屏蔽。
example


<?php
file_put_contents('test.csv','user1111,user222'."\n".'user3333,user4444');

if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 6, ",")) !== FALSE) {

        echo $data[0] . "<br />\n";

    }
    fclose($handle);
}
?> 

以上會輸出

user11
11
r222
user33
33
r4444

fgets()

fgets — 從文件指針中讀取一行

string fgets ( resource $handle [, int $length ] )

參數

handle
文件指針必須是有效的,必須指向由 fopen() 或 fsockopen() 成功打開的文件(並還未由 fclose() 關閉)。

length
從 handle 指向的文件中讀取一行並返回長度最多爲 length - 1 字節的字符串。碰到換行符(包括在返回值中)、EOF 或者已經讀取了 length - 1 字節後停止(看先碰到那一種情況)。如果沒有指定 length,則默認爲 1K,或者說 1024 字節。

Note:

從 PHP 4.3 開始,忽略掉 length 則行的長度被假定爲 1024,將繼續從流中讀取數據直到行結束。如果文件中的大多數行都大於 8KB,則在腳本中指定最大行的長度在利用資源上更爲有效。

返回值

從指針 handle 指向的文件中讀取了 length - 1 字節後返回字符串。 如果文件指針中沒有更多的數據了則返回 FALSE。

錯誤發生時返回 FALSE。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章