php 文件远程下载

getFile(“http://pic4.nipic.com/20091217/3885730_124701000519_2.jpg”,”,’xuxin’);
/**
* php实现下载远程图片保存到本地
**
* $url 图片所在地址
* $path 保存图片的路径
* $filename 图片自定义命名
* $type 使用什么方式下载
* 0:curl方式,1:readfile方式,2file_get_contents方式
*
* return 文件名
*/
function getFile($url,$path=”,$filename=”,$type=0){
if($url==”){
return false;
}
//获取远程文件数据
if($type===0){
$ch=curl_init(); //初始化一个cURL会话
$timeout=20;
curl_setopt($ch,CURLOPT_URL,$url); //取回的URL地址
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //如果成功只将结果返回,不自动输出任何内容。
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);//最长执行时间
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);//最长等待时间

$img=curl_exec($ch); //获取的信息以文件流的形式返回
curl_close($ch);
}
if($type===1){
ob_start(); //打开缓冲区
readfile($url); //输出一个文件。
$img=ob_get_contents(); //得到缓冲区的数据
ob_end_clean(); //终止缓冲
}
if($type===2){
$img=file_get_contents($url); //把整个文件读入一个字符串中
}
//判断下载的数据 是否为空 下载超时问题
if(empty($img)){
throw new \Exception(“下载错误,无法获取下载文件!”);
}

//没有指定路径则默认当前路径
if($path===”){
$path=”./”;
}
//如果命名为空
if($filename===””){
$filename=md5($img);
}
//获取后缀名
$ext=substr($url, strrpos($url, ‘.’)); //查找字符串在另一字符串中最后一次出现的位置
if($ext && strlen($ext)<5){ $filename.=$ext; } //防止"/"没有添加 $path=rtrim($path,"/")."/"; //var_dump($path.$filename);die(); $fp2=@fopen($path.$filename,'a'); //写入方式打开文件 fwrite($fp2,$img); //数据写入 fclose($fp2); //关闭 //echo "finish"; return $filename; 正则匹配html标签的内容 案例 $regex4="/

.*?<\/p>/ism”;
if(preg_match_all($regex4, $return, $matches)){
var_dump($matches[0]);
}
默认安装使用的curl是不支持https协议的需要在代码块里面添加一下两端代码用来支持https协议
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false );

猜你喜欢

转载自www.cnblogs.com/xin521/p/9077007.html