如何使用PHP的fopen、fread、fwrite、fclose实现高效读写大二进制文件而不占用过多内存?

更新于
2026-09-26 06:00:40
1阅读来源:SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计380个文字,预计阅读时间需要2分钟。

如何使用PHP的fopen、fread、fwrite、fclose实现高效读写大二进制文件而不占用过多内存?

PHP读取/写入二进制文件,无需申请大量内存(fopen、fread、fwrite、fclose):php

// 处理数据 // ...} else { // 文件打开失败 // ...}?>

PHP下载/采集远程图片到本地:php

// 下载图片$ch=curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_TIMEOUT, 10);$binaryData=curl_exec($ch);curl_close($ch);

如何使用PHP的fopen、fread、fwrite、fclose实现高效读写大二进制文件而不占用过多内存?

// 保存图片到本地file_put_contents('local_image.jpg', $binaryData);?>

PHP读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)(转)

纠正:
PHP下载/采集远程图片到本地:www.oschina.net/code/snippet_1398542_50533

1.[代码][PHP]代码

<?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param string $dstPath 目标文件路径 * @return bool */ function fetch_big_file($srcPath, $dstPath) { set_time_limit(0); // 设置脚本执行时间无限长 if (!$fpSrc = fopen($srcPath, "rb")) { return false; } $isWriteFileOpen = false; // 写文件 是否已打开? do { $data = fread($fpSrc, 8192); // 每次读取 8*1024个字节 if (!$data) { break; } else if (!$isWriteFileOpen) { // 第一次读取文件,并且有内容,才创建文件 $fpDst = fopen($dstPath, "wb"); $isWriteFileOpen = true; fwrite($fpDst, $data); } else { // 写入 fwrite($fpDst, $data); } } while (true); fclose($fpSrc); fclose($fpDst); return true; } $srcPath = 'd:/PHP/data/eclipse-jee-kepler-R-win32-x86_64.pdf'; $dstPath = 'Z:/reslibCovertingfiles/eclipse-jee-kepler-R-win32-x86_64.pdf'; fetch_big_file($srcPath, $dstPath); echo 'success';

本文共计380个文字,预计阅读时间需要2分钟。

如何使用PHP的fopen、fread、fwrite、fclose实现高效读写大二进制文件而不占用过多内存?

PHP读取/写入二进制文件,无需申请大量内存(fopen、fread、fwrite、fclose):php

// 处理数据 // ...} else { // 文件打开失败 // ...}?>

PHP下载/采集远程图片到本地:php

// 下载图片$ch=curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_TIMEOUT, 10);$binaryData=curl_exec($ch);curl_close($ch);

如何使用PHP的fopen、fread、fwrite、fclose实现高效读写大二进制文件而不占用过多内存?

// 保存图片到本地file_put_contents('local_image.jpg', $binaryData);?>

PHP读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)(转)

纠正:
PHP下载/采集远程图片到本地:www.oschina.net/code/snippet_1398542_50533

1.[代码][PHP]代码

<?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param string $dstPath 目标文件路径 * @return bool */ function fetch_big_file($srcPath, $dstPath) { set_time_limit(0); // 设置脚本执行时间无限长 if (!$fpSrc = fopen($srcPath, "rb")) { return false; } $isWriteFileOpen = false; // 写文件 是否已打开? do { $data = fread($fpSrc, 8192); // 每次读取 8*1024个字节 if (!$data) { break; } else if (!$isWriteFileOpen) { // 第一次读取文件,并且有内容,才创建文件 $fpDst = fopen($dstPath, "wb"); $isWriteFileOpen = true; fwrite($fpDst, $data); } else { // 写入 fwrite($fpDst, $data); } } while (true); fclose($fpSrc); fclose($fpDst); return true; } $srcPath = 'd:/PHP/data/eclipse-jee-kepler-R-win32-x86_64.pdf'; $dstPath = 'Z:/reslibCovertingfiles/eclipse-jee-kepler-R-win32-x86_64.pdf'; fetch_big_file($srcPath, $dstPath); echo 'success';