将文件的一部分写入文件而不加载到内存中

时间:2013-05-30 21:01:37

标签: php file

我正在使用此代码:

// write parts of file to file
file_put_contents($file,file_get_contents($ar, NULL, NULL, $s, $e));

将一个文件的一部分写入新文件。

如何在不将文件加载到内存的情况下使用stream_copy_to_stream或任何其他方法执行此操作?

2 个答案:

答案 0 :(得分:2)

如果你在php.net上进行一些搜索,你可以很容易地找到一个可以满足你需要的例子。你也可以根据你的问题的意见使用我的建议。

<?php

$src = fopen('http://www.example.com', 'r');
$dest1 = fopen('first1k.txt', 'w');
$dest2 = fopen('remainder.txt', 'w');

echo stream_copy_to_stream($src, $dest1, 1024) . " bytes copied to first1k.txt\n";
echo stream_copy_to_stream($src, $dest2) . " bytes copied to remainder.txt\n";

?>

但是,根据你的PHP版本,它似乎是一个非常记忆的问题。 fopenfreadfwrite的方式可以是

<?php

    function customCopy($in, $out)
    {
        $size = 0;

        while (!feof($in))
            $size += fwrite($out, fread($in,8192));

        return $size;
    }

?>

假设$in$out是文件处理程序资源。

答案 1 :(得分:1)

您可以执行类似

的操作
  $fp = fopen($ar, "r");
  $out = fopen($file, "wb");
  fseek($fp, $se);
  while ($data = fread($fp, 2000)){
      fwrite($out, $data);
  }
  fclose($out);
  fclose($fp);