PHP加载到文件而不加载到内存中?

时间:2015-04-21 15:59:14

标签: php memory filesystems

我认为标题几乎说明了一切。我想在现有的TXT文件中添加一个String(单行)。现有文件可能非常大,所以我试着想出最经济有效的方法。

我知道以下内容可行:

$str = 'My new line';
$str .= file_get_contents('file.txt');
file_put_contents('file.txt', $str);

将一个巨大的文件加载到一行前面似乎有点过分了。

思想?

3 个答案:

答案 0 :(得分:3)

我倾向于使用像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);

答案 1 :(得分:1)

$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);

答案 2 :(得分:0)

$str = 'My new line';
file_put_contents('file.txt', $str, FILE_APPEND | LOCK_EX);