在 PHP 中生成的大文件的索引问题


indexing problems on large files generated in php

我在检索大文件(> 7GB)的值时遇到问题。一旦我找到解决方案,主要使用 fgets ()。此类案例的示例:我的文件:

#CHROM  POS ID  REF ALT
1   8   rs392108184 T   G
4   91  rs122936913 G   T

我的代码:

<?php
    //(1)
    echo "(1)";
    $data = file_get_contents("data/ncbi/5.vcf");
    $data = explode("'n", $data);
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    //(2)
    echo "(2)";
    $handle = @fopen("data/ncbi/5.vcf", "r");
    if ($handle) {
        while (($buffer = fgets($handle, 4096)) !== false) {
            $buffer = explode("'n", $buffer);
            echo '<pre>';
        print_r($buffer);
        echo '</pre>';
        }
        fclose($handle);
    }
?>

输出:

(1)
Array
(
    [0] => #CHROM   POS ID  REF ALT
    [1] => 1    8   rs392108184 T   G
    [2] => 4    91  rs122936913 G   T
)
(2)
Array
(
    [0] => #CHROM   POS ID  REF ALT
    [1] => 
)
Array
(
    [0] => 1    8   rs392108184 T   G
    [1] => 
)
Array
(
    [0] => 4    91  rs122936913 G   T
    [1] => 
)

如果我使用 (1),可以根据需要输出,但不能用于大文件。而如果我使用 (2),可以用于大文件,但输出不是我想要的,因为迭代不清楚。我想使用大文件,输出可能是这样的。

Array
    (
        [0] => #CHROM   POS ID  REF ALT
        [1] => 1    8   rs392108184 T   G
        [2] => 4    91  rs122936913 G   T
    )

有什么解决办法吗?

如果在尝试将整个文件加载到内存中时内存不足,请计算自己代码中的行数:

$linenum = 0;
while ($line = fgets($handle)) {
    echo "<pre>($linenum) => $line</pre><br>";
    $linenum++;
}