1.現在有一個300M的檔案 需要把裡面的資料一行一行讀取出來,每行進行處理(無法做成冪等)。但是怕處理過程中系統掛掉,不知道該從哪一行再重新讀取,怕掛之前已經處理的行再次處理一遍
2.現在想到的方案是讀取一行處理一行之後把該行刪除,即時程式掛掉,再次執行從開始讀也不會讀取到原來已經處理的行
3.看一下各位大牛有沒有好的解決方案謝謝
//想讀取一行刪除一行 該如何操作或有更好的解決方案 避免同一行執行兩次
$fp = fopen($fileName, "r");
if (!$fp) {
return -1;
}
$max = 40960; //40k
while (!feof($fp)) {
$line = fgets($fp, $max);
}
既然是規定一行一行讀取的,那麼何不寫一個腳本把文件先拆分成多個小文件(注意命名,比如
Linux
中的split
命令),然後再寫個腳本循環讀取操作。我覺得你可以換個方式來實現你要的效果:你可以讀取一行,處理完這行後,在這行後面加個特殊的符號。循環遍歷每行就能知道哪些行是被處理過的。假如你的程式掛掉,再次執行的時候,直接搜尋那個特殊符號最後一次出現的地方。然後這個地方的下一行就是你該開始執行的地方了。
另外寫個檔案, 記錄處理位置. 記行號也行, 整體檔案的偏移也行.
邊讀邊改文件, 效能太低吧.