PHP按行讀取、處理較大CSV文件的代碼實例
對于數(shù)百萬條數(shù)據(jù)量的CSV文件,文件大小可能達到數(shù)百M,如果簡單讀取的話很可能出現(xiàn)超時或者卡死的現(xiàn)象。
為了成功將CSV文件里的數(shù)據(jù)導入數(shù)據(jù)庫,分批處理是非常必要的。
下面這個函數(shù)是讀取CSV文件中指定的某幾行數(shù)據(jù):
/**
* csv_get_lines 讀取CSV文件中的某幾行數(shù)據(jù)
* @param $csvfile csv文件路徑
* @param $lines 讀取行數(shù)
* @param $offset 起始行數(shù)
* @return array
* */
function csv_get_lines($csvfile, $lines, $offset = 0) {
if(!$fp = fopen($csvfile, 'r')) {
return false;
}
$i = $j = 0;
while (false !== ($line = fgets($fp))) {
if($i++ < $offset) {
continue;
}
break;
}
$data = array();
while(($j++ < $lines) && !feof($fp)) {
$data[] = fgetcsv($fp);
}
fclose($fp);
return $data;
}
調(diào)用方法:
$data = csv_get_lines('path/bigfile.csv', 10, 2000000);
print_r($data);
函數(shù)主要采用行定位的思路,通過跳過起始行數(shù)來實現(xiàn)文件指針定位。
上述函數(shù)對500M以內(nèi)的文件進行過測試,運行通暢,對于更大的文件未做測試,請斟酌使用或加以改進。
- php導入csv文件碰到亂碼問題的解決方法
- 基于PHP讀取csv文件內(nèi)容的詳解
- php使用fgetcsv讀取csv文件出現(xiàn)亂碼的解決方法
- 詳解PHP導入導出CSV文件
- php將csv文件導入到mysql數(shù)據(jù)庫的方法
- php對csv文件的讀取,寫入,輸出下載操作詳解
- php中數(shù)據(jù)的批量導入(csv文件)
- php寫入數(shù)據(jù)到CSV文件的方法
- php fputcsv命令 寫csv文件遇到的小問題(多維數(shù)組連接符)
- PHP下載生成的csv文件及問題總結(jié)
- PHP實現(xiàn)CSV文件的導入和導出類
- php實現(xiàn)的讀取CSV文件函數(shù)示例
相關文章
對于ThinkPHP框架早期版本的一個SQL注入漏洞詳細分析
這篇文章主要介紹了對于ThinkPHP框架早期版本的一個SQL注入漏洞詳細分析,對于網(wǎng)站安全十分重要!需要的朋友可以參考下2014-07-07php如何根據(jù)IP獲取當前經(jīng)緯度以及地域信息
這篇文章主要給大家介紹了關于php如何根據(jù)IP獲取當前經(jīng)緯度以及地域信息的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-01-01PHP中的empty、isset、isnull的區(qū)別與使用實例
今天小編就為大家分享一篇關于PHP中的empty、isset、isnull的區(qū)別與使用實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03ThinkPHP模板循環(huán)輸出Volist標簽用法實例詳解
這篇文章主要介紹了ThinkPHP模板循環(huán)輸出Volist標簽用法,結(jié)合實例形式詳細分析了Volist標簽的功能,使用方法與相關注意事項,需要的朋友可以參考下2016-03-03