PHP 在不将文件加载到内存的情况下添加到文件前面?
PHP to prepend to file without loading it into memory?
我认为标题已经说明了一切。我想在现有的 TXT 文件中添加一个字符串(单行)。现有文件可能非常大,因此我正在尝试考虑最 cost-efficient 的方法。
我知道以下方法有效:
$str = 'My new line';
$str .= file_get_contents('file.txt');
file_put_contents('file.txt', $str);
加载一个巨大的文件而只在前面加上一行似乎有点过分了。
想法?
$str = 'My new line';
file_put_contents('file.txt', $str, FILE_APPEND | LOCK_EX);
我倾向于使用像 php://temp
这样的 PHP 流,它不使用与 PHP 相同的内存,因此不受相同的限制
$src = fopen('dummy.txt', 'r+');
$dest = fopen('php://temp', 'w');
fwrite($dest, 'My new line' . PHP_EOL);
stream_copy_to_stream($src, $dest);
rewind($dest);
rewind($src);
stream_copy_to_stream($dest, $src);
fclose($src);
fclose($dest);
$filename = 'text.txt';
$str = 'My new line';
$tmpname = 'tmp.txt';
$context = stream_context_create();
$fp = fopen($filename, 'r', 1, $context);
file_put_contents($tmpname, $str);
file_put_contents($tmpname, $fp, FILE_APPEND);
fclose($fp);
unlink($filename);
rename($tmpname, $filename);
我认为标题已经说明了一切。我想在现有的 TXT 文件中添加一个字符串(单行)。现有文件可能非常大,因此我正在尝试考虑最 cost-efficient 的方法。
我知道以下方法有效:
$str = 'My new line';
$str .= file_get_contents('file.txt');
file_put_contents('file.txt', $str);
加载一个巨大的文件而只在前面加上一行似乎有点过分了。
想法?
$str = 'My new line';
file_put_contents('file.txt', $str, FILE_APPEND | LOCK_EX);
我倾向于使用像 php://temp
这样的 PHP 流,它不使用与 PHP 相同的内存,因此不受相同的限制
$src = fopen('dummy.txt', 'r+');
$dest = fopen('php://temp', 'w');
fwrite($dest, 'My new line' . PHP_EOL);
stream_copy_to_stream($src, $dest);
rewind($dest);
rewind($src);
stream_copy_to_stream($dest, $src);
fclose($src);
fclose($dest);
$filename = 'text.txt';
$str = 'My new line';
$tmpname = 'tmp.txt';
$context = stream_context_create();
$fp = fopen($filename, 'r', 1, $context);
file_put_contents($tmpname, $str);
file_put_contents($tmpname, $fp, FILE_APPEND);
fclose($fp);
unlink($filename);
rename($tmpname, $filename);