我有一個1.3GB的文本文件,我需要從PHP中提取一些信息。我已經研究過它,並想出了幾種不同的方式來做我需要做的事情,但是一如往常,在稍微澄清一下哪種方法最好,或者如果有另一種更好的存在我不知道?使用PHP從1.3GB文本文件中提取文本的最佳方法?
我在文本文件中需要的信息只是每行的前40個字符,並且文件中有大約1700萬行。每行中的40個字符將被插入到數據庫中。
我的方法如下;
// REMOVE TIME LIMIT
set_time_limit(0);
// REMOVE MEMORY LIMIT
ini_set('memory_limit', '-1');
// OPEN FILE
$handle = @fopen('C:\Users\Carl\Downloads\test.txt', 'r');
if($handle) {
while(($buffer = fgets($handle)) !== false) {
$insert[] = substr($buffer, 0, 40);
}
if(!feof($handle)) {
// END OF FILE
}
fclose($handle);
}
以上就是一次讀取每一行,並獲取數據,我把所有的數據庫插入排序,在交易十次在同一時間做50個插入。
下一個方法與上面的方法相同,但在調用foreach
來獲取數據之前調用file()
來存儲數組中的所有行?我不確定這種方法,因爲陣列本質上會有1700萬以上的值。
另一種方法是隻提取文件的一部分,用未使用的數據重寫文件,在執行該部分之後,使用header
調用調用腳本?
以最迅速和最有效的方式完成此項工作的最佳方法是什麼?還是有更好的方法來處理這個我想到的?
此外,我打算使用這個腳本的瓦特,但在瀏覽器中運行它,而測試已經導致超時的問題,即使將腳本時間設置爲0.有沒有一種方法可以執行腳本來運行,而無需訪問通過瀏覽器頁面?
對於最後一點,'php path/to/script.php'將執行腳本。 – sarnold
@sarnold我只是從命令行做到這一點?謝謝 – Griff
是的,直接從命令行。如果你打算經常通過在腳本的第一行添加'#!/ path/to/php',然後運行'chmod 755 path/to/script'或'chmod 500'或任何適當的權限,你想要的。 – sarnold