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必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...
随机推荐
- Linux中DNS分离解析
目录 一.分离解析概述 二.DNS分离解析实验 要求 实验步骤 一.分离解析概述 分离解析:同一个dns服务器,同一个域名情况下,不同网段进行访问会解析出不同的IP地址 分离解析的域名服务器实际也是主 ...
- Python--数据存储
新建测试文档测试.txt内容如下: 张三:今天天气真好. 李四:是的,真的太好了. 张三:阳光明媚. 李四:鸟语花香. 王五:装逼现场:请带好安全帽 张三:难得好天气,今天就不偷懒了. 李四:能把乞讨 ...
- BUUCTF刷题系列(2)5.27日记
CTF-Bugku-安卓篇1signin Writeup Bugku安卓部分第一题,第七届山东省大学生网络安全技能大赛的题目,属于Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberch ...
- 优化 SQL 语句的步骤
优化 SQL 语句的步骤 1.分析MySQL服务器当前的状态信息 SHOW SESSION STATUS; SHOW SESSION STATUS LIKE 'Com_%' //当前会话下所有语句类型 ...
- SQL 练习4
查询不存在" 01 "课程但存在" 02 "课程的情况 SELECT * from sc WHERE cid = '02' AND sid not in (SE ...
- 题解 Strange Housing
传送门 首先想了黑白染色,发现不会染 其实可以考虑如何动态地维护出这个点集 发现题面里对不在点集之中的点之间的连边没有要求 所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点 若它与 ...
- 8、二进制安装K8s之部署CIN网络
二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...
- Qt foreach关键字用法(无师自通)
Qt 提供一个关键字 foreach (实际是 <QtGlobal> 里定义的一个宏)用于方便地访问容器里所有数据项. foreach 关键字用于遍历容路中所有的项,使用 foreach ...
- PsSetCreateProcessNotifyRoutineEx 创建回调函数
转载自http://blog.csdn.net/yushiqiang1688/article/details/5209597 最近要做一个进程监控的程序,功能很简单,就是创建和退出进程的时候,能触发我 ...
- ArcGIS图层添加字段出现:“定义了过多字段”
首先,我图层数据格式为mdb,也就是Access数据库 Access一个表最大支持255个字段,可是我的才添加第一个字段就出现"定义了过多字段"的错误 打开ArcMap添加字段也是 ...