用PHP连接文件

时间:2013-07-01 15:01:08

标签: php

我想知道在PHP中连接2个文本文件的方法是否比在txt1中打开a+的常用方法更快,阅读txt2行按行并将每行复制到txt1

6 个答案:

答案 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>";
?>

http://php.net/manual/en/function.shell-exec.php

答案 5 :(得分:0)

尽管最快的方法无疑是使用操作系统命令(例如cp或cat),但出于兼容性考虑,建议不要这样做。

最快的“仅PHP”方式是使用file_get_contents,它可以一次读取整个源文件,但是它也有一些缺点。大文件将需要大量内存,因此,根据分配给PHP的内存,它可能会失败。

一种通用的干净快速的解决方案是使用fread和fwrite带有大缓冲区。

如果文件小于缓冲区,则所有读取将在一个突发中发生,因此速度是最佳的,否则读取发生在较大的块(缓冲区的大小)上,因此开销最小并且速度相当好。 / p>

相反,用fgets逐行读取,如果是换行符或换行符,则必须逐个测试每个字符。 另外,用fgets逐行读取包含许多短行的文件会比较慢,因为您将读取许多小文件,它们的大小取决于换行符的位置。

fread速度更快,因为它仅检查EOF(这很简单)并使用您决定的固定大小的块读取文件,因此可以使其最适合您的OS或磁盘或某种文件(例如,您有很多文件<您可以将缓冲区大小设置为12k,将缓冲区大小设置为16k,这样一来就可以全部读取)。

//代码未经测试就写在手机的Stack Overflow内部,来自在线的各种示例,您也可以检查。

configblock