php curl下载文件由于空格导致下载文件失败
<?php //$result=httpcopy('http://www.phpernote.com/image/logo.gif'); echo '<pre>';print_r($result); function httpcopy($url,$file='',$timeout=60){
$file=empty($file)?pathinfo($url,PATHINFO_BASENAME):$file;
$dir=pathinfo($file,PATHINFO_DIRNAME);
!is_dir($dir)&&@mkdir($dir,0755,true);
$url=str_replace(' ',"%20",$url);
$result=array('fileName'=>'','way'=>'','size'=>0,'spendTime'=>0);
$startTime=explode(' ',microtime());
$startTime=(float)$startTime[0]+(float)$startTime[1];
if(function_exists('curl_init')){
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$temp=curl_exec($ch);
if(@file_put_contents($file,$temp)&&!curl_error($ch)){
$result['fileName']=$file;
$result['way']='curl';
$result['size']=sprintf('%.3f',strlen($temp)/1024);
}
}else{
$opts=array(
'http'=>array(
'method'=>'GET',
'header'=>'',
'timeout'=>$timeout
)
);
$context=stream_context_create($opts);
if(@copy($url,$file,$context)){
$result['fileName']=$file;
$result['way']='copy';
$result['size']=sprintf('%.3f',strlen($context)/1024);
}
}
$endTime=explode(' ',microtime());
$endTime=(float)$endTime[0]+(float)$endTime[1];
$result['spendTime']=round($endTime-$startTime)*1000;//单位:毫秒
return $result;
}
PHP CURL实现远程下载文件到本地,该函数返回结果包括下载耗用的时间,保存的文件名,以及使用的下载方式
str_replace(' ',"%20",$url); 这个是由于如果url有空格,会导致下载文件失败,
也可以使用urlencode,但是这个会把空格变成加号+,导致文件不存在,可以使用使用rawurlencode()来进行编码即可~此函数遵循RFC 3986标准,空格会被转为%20
同时,对于此函数转码的url,普通的urldecode是不能正确解码的,所以官方也提供了rawurldecode()函数来对转码后的结果解码
另一个简单方法:
function upload_get_img($url, $target)
{
$url = str_replace(' ',"%20",$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$info = curl_exec($curl);
curl_close($curl);
$newFileName = $target;//保存的本地地址及文件名
$fp2 = @fopen($newFileName, "w");
fwrite($fp2, $info);
fclose($fp2);
return $newFileName;//返回新的文件路径及文件名
}
php curl下载文件由于空格导致下载文件失败的更多相关文章
- js上传文件过大导致上传失败原因以及解决办法
背景:项目需要用到上传视频功能,由于视频有知识产权,要求必须上传到自己的服务器上不允许用第三方视频网站接口上传,于是一开始开始用的是input type=file去上传,小的视频上传没有问题,上传将近 ...
- /etc/hosts文件设置不对导致Jboss启动失败
Caused by: javax.management.MBeanRegistrationException: preRegister() failed: [ObjectName='jboss.rem ...
- 一次因为文件名开头包含空格而导致FTP文件一直无法下载的悲剧!
最近负责公司研究新的多渠道打包方案,之前的打包方案太慢了,因此采用了美团的Android Signature V2 Scheme签名下的新一代渠道包打包神器 方案进行了多渠道打包.但是由于马虎,在配置 ...
- 解决PHP上传文件、下载文件中由于文件过大导致的上传失败及下载不全问题
用php+apache上传文件的时候,由于文件过大,容易导致上传失败, 解决办法:修改php.ini中:upload_max_filesize 2m 即允许上传文件大小的最大值.默认为2M ,大小 ...
- 【PHP开发】远程文件(图片)下载
这一篇文章介绍的方法不算原创了,只是引用的别人的文章,加上自己的注释,因为接触php时间不长,所以尝试的东西比较多,自己加的注释也比较简单,php高手请略过. 我要用到远程下载图片,是在做微信公众平台 ...
- php实现文件上传与下载(上)
php实现文件的上传与下载是一个挺基本的功能,一般网站多多少少都会有这样的需求在内,当然不是说所有的文件都可以被上传,那这网络就太没有安全性可言了.因为接触php时间不长,今天写练练手,随笔也就是公开 ...
- [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)
wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...
- javaWeb实现文件上传与下载 (转)
文件上传概述 实现web开发中的文件上传功能,需完成如下二步操作: 在web页面中添加上传输入项 在servlet中读取上传文件的数据,并保存到本地硬盘中. 如何在web页面中添加上传输入项? < ...
- iOS开发网络请求——大文件的多线程断点下载
iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...
随机推荐
- Java调用Zookeeper
watch机制 Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性. Zookeeper所有的读操作getData(), getChildren()和 ...
- 【网络编程】TCPIP_3_地址族与数据序列
目录 前言 3. 地址族与数据序列 3.1 分配给套接字的 IP 地址与端口号 3.2 参数 IP 地址 3.2.1 IPV4 地址的结构体 3.2.2 地址族(Address Family) 3.2 ...
- DVWA靶场之SQL injection(blind)通关
盲注,顾名思义,无法从界面上直接查看到执行结果,一般的SQL注入基本绝迹,最多的就是盲注 基本步骤:(由于没有回显了,相比一般的SQL注入,也就不需要确定查询字段数.判断回显位置了) 判断注入类型 破 ...
- Layui-自定义函数及调用
控件 表格 时间范围 页面展示 场景 页面中选择开始时间和结束时间表格变化 使用 html代码 <div> <form class="layui-form" ac ...
- LNMP 方式部署 zabbix 5.0
文章链接 Zabbix 5.0 LTS新增功能 新版本附带了可用性,安全性和完整性方面的重大改进列表.Zabbix团队遵循的主要策略是使Zabbix尽可能可用.Zabbix是一种开源,免费的监视解决方 ...
- noip18
T1 来自cf原题 考场直接暴力枚举 \(A,B\),15pts. 正解: 首先时间的表达式,\(T=\frac{A}{a_{i}}+\frac{B}{b_{i}}\),然后以\(\frac{1}{a ...
- BZOJ 4826 影魔
本题可以采用主席树的在线做法,只不过常数会 \(super\) 大. 和其他题解差不多,我们先要求出第 \(i\) 个数的 \(l_i\) 和 \(r_i\) ,其中 \(l_i\) 表示左边第一个比 ...
- C# 如何在编译时将 dll 复制到 bin\Release 目录下
下面假设 Project 名为 Gamma4RTD,需要调用的 dll 文件为 rtddll.dll.IDE 是 Visual Studio 2015 打开 Visual Studio 2015 -& ...
- C++指向函数的指针数组
可以定义一个指针,指向一个函数,还 可以定义一个指向函数的指针数组,每个元素都是一个指向函数的指针,不过,它们指向的函数的格式都是相同的. 代码如下 //指向函数的指针数组 #include<i ...
- 【java文件处理】java项目路径下的文件下载处理
1. controller类: package com.neo.controller; import javax.servlet.http.HttpServletResponse; import or ...