zoukankan      html  css  js  c++  java
  • PHP读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)

    <?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';

    参考:

    http://php.net/manual/zh/function.fread.php

    延伸阅读:

    PHP如何快速读取大文件

  • 相关阅读:
    java中finally的使用
    String基本方法
    java文件读写常用方法
    java笔试面试(转载)
    单链表的反转
    单链表的冒泡排序
    Java快速教程
    Java快速教程
    后海日记(4)
    后海日记(3)
  • 原文地址:https://www.cnblogs.com/52php/p/5677803.html
Copyright © 2011-2022 走看看