我有一个文件句柄,它已将文件遍历到某个点(基于某些逻辑)
我现在需要将文件的其余部分从句柄位置复制到另一个文件的末尾。
如何在给定文件很大的情况下以最佳方式执行此操作。
漫长的道路将是
while (($line = fgets($handle, 4096)) !== FALSE) {
write $line to the new file one at a time;
}
答案 0 :(得分:1)
听起来像stream_copy_to_stream就是这样。
修改:sscce:
<?php
$fpSrc = fopen('php://memory', 'rwb');
$fpTarget = fopen('php://memory', 'rwb');
fwrite($fpSrc, join('', range('a', 'z'))); // some dummy data for the source stream
fseek($fpSrc, 0, SEEK_SET); // rewind
/* <--- the relevant code */
// searching for "delimiter"
while(!feof($fpSrc)) {
$c = fread($fpSrc, 1);
if ('m'===$c) break;
}
// copy remaining data
stream_copy_to_stream($fpSrc, $fpTarget);
/* end of relevant code ---> */
// rewind & print contents of target stream
fseek($fpTarget, 0, SEEK_SET);
echo stream_get_contents($fpTarget);
打印nopqrstuvwxyz
。