如果你出于某种原因需要从字符串而不是文件指针中获取行,请尝试:
<?php
function string_gets(string $source, int $offset = 0, string $delimiter = "\n"): ?string
{
$len = strlen($source);
if ($len < $offset) {
return null;
}
if ($len === $offset) {
return null;
}
$delimiter_pos = strpos($source, $delimiter, $offset);
if ($delimiter_pos === false) {
return substr($source, $offset);
}
return substr($source, $offset, ($delimiter_pos - $offset) + strlen($delimiter));
}
?>
(我需要逐行处理一个大约 16GB 的内存中字符串,但是如果我尝试使用 explode("\n",$str);,我会在 32GB 内存的系统上出现内存分配崩溃,所以我采用了这种方法..有趣的是,fgets() 似乎比在 php 中的内存中处理更快。php 7.3.7)