我在检索大文件(> 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++;
}