我想知道在PHP中连接2个文本文件的方法是否比在txt1
中打开a+
的常用方法更快,阅读txt2
行按行并将每行复制到txt1
。
答案 0 :(得分:13)
如果你有PHP的命令行权限,在linux中使用cat
程序可能要快得多
system('cat txt1 txt2 > txt3');
答案 1 :(得分:10)
如果您想使用纯PHP解决方案,可以使用file_get_contents
以字符串形式读取整个文件,然后将其写出来(不进行错误检查,只是为了说明如何执行此操作):
$fp1 = fopen("txt1", 'a+');
$file2 = file_get_contents("txt2");
fwrite($fp1, $file2);
答案 2 :(得分:6)
$content = file_get_contents("file1");
file_put_contents("file2", $content, FILE_APPEND);
答案 3 :(得分:1)
我发现在这里使用* nix cat
是最有效的方法,但是如果由于某种原因您无权访问它,并且要串联大文件,则可以逐行使用功能。 (为简化起见,删除了错误处理)。
function catFiles($arrayOfFiles, $outputPath) {
$dest = fopen($outputPath,"a");
foreach ($arrayOfFiles as $f) {
$FH = fopen($f,"r");
$line = fgets($FH);
while ($line !== false) {
fputs($dest,$line);
$line = fgets($FH);
}
fclose($FH);
}
fclose($dest);
}
答案 4 :(得分:0)
您可以在PHP cat
内使用shell_exec
<?php
$output = shell_exec('cat file1.txt file2.txt file3.txt file4.txt > ./mergedfile.txt
');
echo "<pre>$output</pre>";
?>
答案 5 :(得分:0)
尽管最快的方法无疑是使用操作系统命令(例如cp或cat),但出于兼容性考虑,建议不要这样做。
最快的“仅PHP”方式是使用file_get_contents,它可以一次读取整个源文件,但是它也有一些缺点。大文件将需要大量内存,因此,根据分配给PHP的内存,它可能会失败。
一种通用的干净快速的解决方案是使用fread和fwrite带有大缓冲区。
如果文件小于缓冲区,则所有读取将在一个突发中发生,因此速度是最佳的,否则读取发生在较大的块(缓冲区的大小)上,因此开销最小并且速度相当好。 / p>
相反,用fgets逐行读取,如果是换行符或换行符,则必须逐个测试每个字符。 另外,用fgets逐行读取包含许多短行的文件会比较慢,因为您将读取许多小文件,它们的大小取决于换行符的位置。
fread速度更快,因为它仅检查EOF(这很简单)并使用您决定的固定大小的块读取文件,因此可以使其最适合您的OS或磁盘或某种文件(例如,您有很多文件<您可以将缓冲区大小设置为12k,将缓冲区大小设置为16k,这样一来就可以全部读取)。
//代码未经测试就写在手机的Stack Overflow内部,来自在线的各种示例,您也可以检查。
configblock