Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP逐行读取大文件代码修改以读取选定行_Php - Fatal编程技术网

PHP逐行读取大文件代码修改以读取选定行

PHP逐行读取大文件代码修改以读取选定行,php,Php,我有一个大的文本文件,包含800K行,大小为60MB。我试过这个代码 $fileData = function() { $file = fopen('800K.txt','r'); if (!$file) die('file does not exist or cannot be opened'); while (($line = fgets($file)) !== false) { yield $line; } fclos

我有一个大的文本文件,包含800K行,大小为60MB。我试过这个代码

$fileData = function() {
    $file = fopen('800K.txt','r');
    if (!$file)
        die('file does not exist or cannot be opened');
    while (($line = fgets($file)) !== false) {
        yield $line;
    }
    fclose($file);
};

foreach ($fileData() as $line) {
   echo $line.'<br>';
}
$fileData=function(){
$file=fopen('800K.txt','r');
如果(!$file)
die('文件不存在或无法打开');
while(($line=fgets($file))!==false){
收益率$line;
}
fclose($文件);
};
foreach($fileData()作为$line){
回显$line.“
”; }
它真的可以工作:)。但缺点是它可以读取所有800k行:(……它可以转换为for循环,所以很容易选择像这样的行

for ($i=1; $i<=10000; $i++){ 
$line=trim($lines[$i]); 
}



ANSWER :
$i=0;  //// start number
foreach ($fileData() as $line) {
   if($i==100) break;  ///// end number
   echo $line.'<br>';
   $i++; 
}
对于($i=1;$i编辑:

这篇文章有一些测试,他们用更大的文件来做

或:


注意,如果项目从0或1开始,我不是100%使用这些方法,因此它可能是(200000、300000)或(199999、299999)

如果脚本有1GB的可用内存…是的,对不起,误读了这个问题。我会用一个更好的答案更新这个问题。更新了一个更好的答案…@Devon我有16 GB的服务器内存。更惯用的方法是,在使用SPL时,使用一个。例如,在
$file
中给定一个SplFileObject,您可以从中读取100行fset 12345的循环如下:
foreach(new LimitIterator($file,12345100)as$line){…}
可以很容易地选择像
这样的行。不确定你在问什么。你能澄清你的问题吗。
$file = '../data/800k.txt';
$lines = file($file);
$rangeStart = 200000;
$rangeEnd = 300000;
$selection = array_slice($lines,$rangeStart,$rangeEnd);
echo json_encode($selection);
$file = '../data/800k.txt';
$rangeStart = 200000;
$rangeLength = 100000;
foreach (new LimitIterator($file, $rangeStart, $rangeLength) as $line) {
    array_push($lines,$line);
}
echo json_encode($lines);