file - php关于文件操作-读取一行处理一行之后把该行删除
PHP中文网
PHP中文网 2017-06-26 10:49:01
0
3
777

1.现在有一个300M的文件 需要把里面的数据一行一行读取出来,每行进行处理(无法做成幂等)。但是怕处理过程中系统挂掉,不知道该从哪一行再重新读取,怕挂之前已经处理的行再次处理一遍
2.现在想到的方案是 读取一行处理一行之后把该行删除,即时程序挂掉,再次执行从开始读也不会读取到原来已经处理的行
3.看一下各位大牛有没有好的解决方案谢谢

//想读取一行删除一行 该如何操作或者有更好的解决方案 避免同一行执行两次

$fp = fopen($fileName, "r");
if (!$fp) {
    return -1;
}
$max = 40960; //40k

while (!feof($fp)) {
    $line = fgets($fp, $max);
    }
PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
淡淡烟草味

既然是规定一行一行读取的,那么何不写一个脚本把文件先拆分成多个小文件(注意命名,比如 Linux 中的 split 命令),然后再写个脚本循环读取操作。

伊谢尔伦

我觉得你可以换个方式来实现你要的效果:你可以读取一行,处理完这行后,在这行后加个特殊的符号。循环遍历每行就能知道哪些行是被处理过的。假如你的程序挂掉,再次执行的时候,直接搜索那个特殊符号最后一次出现的地方。然后这个地方的下一行就是你该开始执行的地方了。

ringa_lee

另外写个文件, 记录处理位置. 记行号也行, 整体文件的偏移也行.

边读边改文件, 性能太低吧.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!