天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

用PHP讀取超大文件的實例代碼

去年年底的各種網站帳號信息的數據庫泄漏,很是給力啊,趁機也下載了幾個數據庫,準備學學數據分析家來分析一下這些帳號信息。雖然這些數據信息都已經被“整理”過的,不過自己拿來學習也挺有用的,畢竟有這么大的數據量。

數據量大帶來的問題就是單個文件很大,能夠打開這個文件相當不容易,記事本就不要指望了,果斷死機。用MSSQL的客戶端也打不開這么大的SQL文件,直接報內存不足,原因據說是MSSQL在讀取數據的時候,是一次性地將讀取到的數據放在內存中,如果數據量過大,而內存不足,則會直接導致系統癱掉。

Navicat Premium
這兒推薦一個軟件Navicat Premium,相當給力啊,幾百兆的SQL文件輕松就打開了,一點都不卡。而且這個客戶端軟件支持MSSQL、MYSQL、Oracle……等等各種數據庫的連接,其它的很多功能就自己慢慢研究了。

雖然用Navicat可以打開CSDN這個274MB的SQL文件,但是內容卻是沒意義的,而且也不方便對這些帳號信息進行查詢、分類、統計等等操作。唯一的方法就是把這些數據一條一條地讀取出來,然后分拆每條記錄的不同片段,再將這些片段以數據字段的格式存入數據庫,這樣就可以方便以后的使用了。

使用php讀取超大文件
php有很多種文件讀取的方式,根據目標文件的不同,采取更合適的方法,可有效地提高執行效率。由于CSDN數據庫文件很大,所以我們盡量不在短時間內全都讀取出來,畢竟每讀取一條數據還要對其分拆和寫入操作。那么比較合適的方式就是對文件進行分區域地讀取,通過使用php的fseek和fread相結合,即可做到隨意讀取文件中的某一部份數據,下面是實例代碼:

復制代碼 代碼如下:
function readBigFile($filename, $count = 20, $tag = "/r/n") {
$content = "";//最終內容
$current = "";//當前讀取內容寄存
$step= 1;//每次走多少字符
$tagLen = strlen($tag);
$start = 0;//起始位置
$i = 0;//計數器
$handle = fopen($filename,'r+');//讀寫模式打開文件,指針指向文件起始位置
while($i < $count && !feof($handle)) {
fseek($handle, $start, SEEK_SET);//指針設置在文件開頭
$current = fread($handle,$step);//讀取文件
$content .= $current;//組合字符串
$start += $step;//依據步長向前移動
//依據分隔符的長度截取字符串最后免得幾個字符
$substrTag = substr($content, -$tagLen);
if ($substrTag == $tag) { //判斷是否為判斷是否是換行或其他分隔符
$i++;
$content .= "<br />";
}
}
//關閉文件
fclose($handle);
//返回結果
return $content;
}
$filename = "csdn.sql";//需要讀取的文件
$tag = "/n";//行分隔符 注意這里必須用雙引號
$count = 100;//讀取行數
$data = readBigFile($filename,$count,$tag);
echo $data;

關于函數傳入的變量$tag的值,根據系統不一樣,傳入的值也是有區別的:Windows用”/r/n”,linux/unix用”/n”,Mac OS用”/r”。

程序執行的大概流程:先定義讀取文件的一些基礎變量,然后打開文件,將指針定位在文件的指定位置,并讀取指定大小的內容。每讀取一次將內容存儲在變量中,直到達到讀取要求的行數或文件結束。

絕不要假定程序中的一切都將按計劃運行。

根據上面的代碼,雖然能夠得到文件中指定位置、指定大小的數據,但這整個過程只執行了一次,并不能得到所有的數據。其實要得到所有的數據,可以在這個循環的外層再添加判斷文件是否結束的循環,但這很浪費系統資源,甚至由于文件過大一直沒法讀完而導致php執行超時。另一種方法就是記錄并存儲上次讀取數據后指針所在的位置,然后再次執行該循環的時候,將指針定位在上次結束的位置,這樣就不存在一次循環要把文件從頭讀到尾的情況。

其實CSDN這個數據庫我到現在都還沒有導入數據庫,因為當時泄漏后沒幾天CNBETA上就有一個分析了,呵呵,動作太快了。當看到別人已經做了這個事之后,自動就沒有多少動力來做了,不過為了學習,還是要抽時間把這個事完成了。

php技術用PHP讀取超大文件的實例代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 花蝴蝶在线高清视频观看免费播放 | 亚洲七七久久桃花综合 | 四虎精品久久 | 国产精品-区区久久久狼 | 国产免费麻传媒精品国产AV | 性绞姿始动作动态图 | av色天堂2018在线观看 | 泷泽萝拉首部av | 成人毛片免费播放 | 孕妇泬出白浆18P | 色偷偷888欧美精品久久久 | 婷婷六月激情综合一区 | 在线色av | 在线毛片片免费观看 | 男人私gay挠脚心vk视频 | 富婆大保健嗷嗷叫普通话对白 | 国产中文在线观看 | 黄色三级三级三级免费看 | 国产精一品亚洲二区在线播放 | 精品久久久久久久久免费影院 | 国产精品久久久久影院 | 我和黑帮老大第365天第2季在线 | 国产在线精品国自产拍影院午夜 | 日日噜噜噜噜夜夜爽亚洲精品 | 被六个男人躁到一夜同性 | 亚洲欧美偷拍视频一区 | 777久久人妻少妇嫩草AV | 久草草在线视视频 | 嫩草影院久久99 | 日日噜噜噜夜夜爽爽狠狠 | 午夜国产一区在线观看 | 506070老熟肥妇bbwxx视频 4虎最新网址 | 伊人亚洲综合青草青草久热 | 九九在线中文字幕无码 | 国产精品九九久久精品视 | 羞羞影院午夜男女爽爽免费 | 青青草原亚洲 | 午夜伦理电影在线观免费 | 国内偷拍夫妻av | 中文无码乱人伦中文视频播放 | 亚洲精品中文字幕制 |