一、splfileobject 分頁(yè)
splfileobject是PHP5中新加入的一個(gè)文件訪問(wèn)類,它繼承于php標(biāo)準(zhǔn)庫(kù)(SPL)中的Iterator和SeekableIterator接口,并提供了對(duì)文件的高效訪問(wèn)和處理。splfileobject中的分頁(yè)方法可以實(shí)現(xiàn)分批讀取文件內(nèi)容,對(duì)于大文件的處理非常有用。
示例代碼:
$file = new SplFileObject('data.txt');
$file->seek(PHP_INT_MAX);
$totalPage = ceil($file->key()/PAGE_SIZE);
for($page=1;$page<=$totalPage;$page++){
$file->seek(($page-1)*PAGE_SIZE);
for($i=1;$i<=PAGE_SIZE;$i++){
echo $file->current();
$file->next();
}
}
以上是一個(gè)基本的讀取文件分頁(yè)展示代碼。SplFileObject中的seek()方法可以移動(dòng)文件指針,key()方法可以獲取當(dāng)前指針?biāo)诘奈恢茫琧urrent()方法可以獲取當(dāng)前指針?biāo)诘膬?nèi)容。通過(guò)計(jì)算可得分頁(yè)的總頁(yè)數(shù),根據(jù)頁(yè)碼移動(dòng)文件指針后進(jìn)行循環(huán)讀取展示。
二、splfileobject 有多少行
splfileobject除了可以進(jìn)行文件讀取展示外,還可以進(jìn)行文件統(tǒng)計(jì),比如可以統(tǒng)計(jì)文件有多少行。此時(shí)可以使用splfileobject中的count()方法進(jìn)行統(tǒng)計(jì)。
示例代碼:
$file = new SplFileObject('data.txt');
echo $file->count();
以上代碼可以讀取data.txt文件并返回此文件中的行數(shù)。需要注意的是,該方法在讀取過(guò)程中是會(huì)影響文件指針的。如果需要進(jìn)行文件處理,可以使用rewind()方法進(jìn)行文件指針重置。
三、splfileobject 文件操作
splfileobject除了可以進(jìn)行文件讀取統(tǒng)計(jì)外,還可以進(jìn)行文件的寫入和追加操作。可以通過(guò)fwrite()和fputcsv()方法來(lái)實(shí)現(xiàn)。需注意的是進(jìn)行文件操作前,必須首先以'w'或'a'模式打開(kāi)文件。
示例代碼:
$file = new SplFileObject('data.txt','a');
$file->fwrite("append content");
$file->fputcsv(array('A', 'B', 'C'));
以上代碼可以打開(kāi)data.txt文件進(jìn)行追加內(nèi)容和寫入CSV格式內(nèi)容。需要特別注意的是寫入內(nèi)容時(shí)需要將列內(nèi)容轉(zhuǎn)換為數(shù)組形式。
四、splfileobject 文件格式化輸出
splfileobject中除了可以進(jìn)行文件的讀取、統(tǒng)計(jì)、寫入和追加外,還可以進(jìn)行文件內(nèi)容的格式化輸出。可以通過(guò)setFlags()方法來(lái)設(shè)置輸出的格式,常用的有SPL_FILE_CSV和SPL_FILE_READ_AHEAD。需要注意的是,setFlags()方法需在打開(kāi)文件前進(jìn)行設(shè)置。
示例代碼:
$file = new SplFileObject('data.csv');
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
foreach ($row as $val){
echo $val;
}
}
以上代碼可以打開(kāi)data.csv文件進(jìn)行CSV格式讀取并格式化輸出。當(dāng)然,如果需要進(jìn)行更加高級(jí)的格式化輸出,還可以通過(guò)文件處理類庫(kù)提供的其他方法進(jìn)行更加靈活的操作。