PHP下载远程文件的3种方法以及性能考虑

今天在做导出Excel的时候,总是要测试导出的Excel文件,频繁的下载和打开,很麻烦
 
就想着写段代码一气呵成  服务端导出Excel==>下载Excel文件到本地==>并打开的操作。
 
这里摘出PHP下载远端文件的方案,以备忘。其中第3种方法考虑到文件过大时的性能问题。
 
 
 
 
 
3种方案:
 
-rw-rw-r-- 1 liuyuan liuyuan 470 Feb 20 18:12 test1_fopen.php
-rw-rw-r-- 1 liuyuan liuyuan 541 Feb 20 18:06 test2_curl.php
-rw-rw-r-- 1 liuyuan liuyuan 547 Feb 20 18:12 test3_curl_better.php
 
 
 
方案1,适用于小文件
 
直接使用fopen()/file_get_contents()获取文件流并用file_put_contents()写入
 
<?php
    //an example xls file form baidu wenku
    $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%20filename=%22php%BA%AF%CA%FD.xls%22&response-content-type=application%2foctet-stream';
 
    $fp_input = fopen($url, 'r');
    file_put_contents('./test.xls', $fp_input);
 
    exec("libreoffice ./test.xls", $out, $status);
?>
  
 
方案2:通过Curl获取内容
 
 
<?php
    //an example xls file form baidu wenku
    $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%20filename=%22php%BA%AF%CA%FD.xls%22&response-content-type=application%2foctet-stream';
 
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    file_put_contents('./test.xls', curl_exec($ch));
    curl_close($ch);
 
    exec("libreoffice ./test.xls", $out, $status);
?>
  
 
第1,2种方案存在一个问题,就是在写入本地磁盘之前,文件会被读入内存中,那么当文件很大的时候,可能会超出内存而崩溃
 
即使你的内存设置的足够的大,那这也是不别要的开销
 
解决方法是:直接给CURL一个可写的文件流来让它自己来解决这个问题(通过 CURLOPT_FILE选项),这样就要先创建一个文件指针给它。
 
 
<?php
    //an example xls file form baidu wenku
    $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%20filename=%22php%BA%AF%CA%FD.xls%22&response-content-type=application%2foctet-stream';
 
    $fp_output = fopen('./test.xls', 'w');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp_output);
    curl_exec($ch);
    curl_close($ch);
 
    exec("libreoffice ./test.xls", $out, $status);
?>
  

时间: 2024-09-12 04:43:35

PHP下载远程文件的3种方法以及性能考虑的相关文章

从性能方面考虑PHP下载远程文件的3种方法_php实例

今天在做导出Excel的时候,总是要测试导出的Excel文件,频繁的下载和打开,很麻烦就想着写段代码一气呵成  服务端导出Excel==>下载Excel文件到本地==>并打开的操作. 这里摘出PHP下载远端文件的方案,以备忘.其中第3种方法考虑到文件过大时的性能问题. 3种方案: -rw-rw-r-- 1 liuyuan liuyuan 470 Feb 20 18:12 test1_fopen.php -rw-rw-r-- 1 liuyuan liuyuan 541 Feb 20 18:06

解析PHP实现下载文件的两种方法

本篇文章是对使用PHP实现下载文件的两种方法进行了详细的分析介绍,需要的朋友参考下   方法一: 复制代码 代码如下:  header('Content-Description: File Transfer');  header('Content-Type: application/octet-stream');  header('Content-Disposition: attachment; filename='.basename($filepath));  header('Content-

PHP下载远程文件到本地存储的方法

 这篇文章主要介绍了PHP下载远程文件到本地存储的方法,实例分析了php远程文件的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP下载远程文件到本地存储的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <?php function GrabImage(

PHP 下载远程文件类(支持断点续传)

PHP 下载远程文件类,支持断点续传下载,代码内含有具体的调用说明.程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有两种使用方法,具体请下载查看源码. <?php /** * 下载远程文件类支持断点续传 */ class HttpDownload { private $m_url = ""; private $m_urlpath = ""; private $m_scheme

PHP下载远程文件类源码,带详细注释,还支持断点续传

程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有两种使用方法,具体请下载查看源码.  代码如下 复制代码 <?php /**  * 下载远程文件类支持断点续传  */ class HttpDownload {     private $m_url = "";      private $m_urlpath = "";      private $m_scheme = "

win8使用IE浏览器查看网页会出现自动下载HTML文件对话框的解决方法

  win8使用IE浏览器查看网页会出现自动下载HTML文件对话框的解决方法.大家都知道windows操作系统内置IE浏览器,Win8系统中很多用户会使用IE浏览器查看网页,通常网页会有很多的超链接可以点击进入下一个网页,不过有的Win8系统用户反馈点击后出现自动下载HTML文件的对话框,而不是打开网页,那么遇到这样的情况如何解决呢?本文教程小编分享几种解决方法,有需要的用户可以往下学习. 方法一: 1.按下WIN+R调出运行然后输入: regsvr32 msxml3.dll 回车; 2.重新打

windows7系统登录远程服务器的两种方法

  windows7系统登录远程服务器的两种方法          解决方法一: 1.Windows系统有自带的登录系统,点击"运行"(或者windows+R)输入"mstsc",即可打开远程桌面连接界面,输入自己的计算机名称; 2.然后输入用户名和密码即可登录,windows的登录方式so easy; 解决方法二: 1.Linux系统相对来说会比较麻烦,它是使用ssh服务来提供远程连接的.因此需要借助诸如putty.xshell.secureCRT等工具进行连接才

不用安装软件查看docx文件的两种方法

  docx是Microsoft Word 2007-2010文档的扩展名.若是97-2003版本的Word没有安装兼容包是无法打开docx文件的.为了能够正常打开文档,我们不得不去下载兼容安装包或者安装高版本的微软Office软件.但是有的用户更喜欢使用旧版本,不愿意再安装新的软件.那么有没有不需安装软件就能打开docx文件的方法呢?答案是有的,接下来系统城小编和大家分享的是不用安装软件就能查看docx文件的两种方法. 方法一:使用QQ邮箱在线查看docx文件 1.打开QQ邮箱,点击写信(可写

合并HEX文件的一种方法

      <合并BIN文件的两种方法>介绍了如何合并BIN文件,在这个基础之上再配合hex2bin.exe和bin2hex.exe这两个小工具就可以很方便的将两个HEX文件合并成一个了.当然,最终目标是在编译完成之后,自动完成所有转换的工作.而这需要在Keil MDK中配置一下编译选项,如下图所示.       在编译完成之后,分别执行两个批处理.先将生成的hex文件转换为bin文件,然后将IAP和Main App的bin文件合并之后,再转换为hex文件.如下图所示.       可以看到,