朋友需要將一個有170w行的txt文件.按行把數據導入到數據庫中..
所以我幫他寫了一下 馬克在這里 萬一也有人用的著:)
以下是代碼片段: header ( "Content-type: text/html;charset=utf-8" ); set_time_limit(0); include(’Database.class.php’); $db = new Database(’127.0.0.1’, ’root’, ’root’, ’test’); //數據庫 $fp = fopen(’171w.txt’, ’r’); //文件 $i=1; //開始行數 $array = array(); //用來存放從XXX-XXX行的數據的數組 //回調函數 function callback($now) { global $db, $array, $i, $fp; if(empty($array)) { //為了節省資源..我們只生成一次數組 while (!feof($fp)) { if($i == $now) { //循環到需要讀取的行數時 for($j=$i;$j<=$i+999;$j++) { //讀取下面的1000行并存儲到數組中 $array[$j] = stream_get_line($fp, 1000000, "\n"); } break; } stream_get_line($fp, 1000000, "\n"); //實踐證明 stream_get_line 比 fgets 快很多.. $i++; } } $db->insert("INSERT INTO test(name) VALUES(’{$array[$now]}’)"); //插入到數據庫中 } include(’SkiyoProcess.class.php’); $sp = new SkiyoProcess(2, 1000, 171000); //間隔為2秒 每次插入1000條數據 一共171000行數據 $sp->process(’callback’); |
原文轉自:http://blogread.cn/it/article/1825