php curl 接口下载文件存储到本地路径上

1、模拟下载php程序2.php

<?php  
$file_name = "down";
$file_name1 = "down.zip";     //下载文件名    
$file_name2 = "1.txt";     //下载文件名  
$file_dir = "./down/";        //下载文件存放目录    
$parameter = $_GET["parameter"];
if($parameter == 0){
	$file_name = $file_name1;
}else{
	$file_name = $file_name2;
}
//检查文件是否存在
$file_name = $file_name1;    
if (! file_exists ( $file_dir . $file_name )) {    
   // header('HTTP/1.1 404 NOT FOUND');  
   echo '{"msg":"无新文件","serviceFlag":1}';
} else {
    
    //以只读和二进制模式打开文件   
    $file = fopen ( $file_dir . $file_name, "rb" ); 
	
    //告诉浏览器这是一个文件流格式的文件    
    Header ( "Content-type: application/octet-stream" ); 
    //请求范围的度量单位  
    Header ( "Accept-Ranges: bytes" );  
    //Content-Length是指定包含于请求或响应中数据的字节长度    
    Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    Header ( "Content-Disposition: attachment; filename=" . $file_name );    
 
    //读取文件内容并直接输出到浏览器    
    echo fread ( $file, filesize ( $file_dir . $file_name ) );    
    fclose ( $file );    
    exit ();    
}  
?>

2、自动下载文件存储到指定路径,并以原名称存储

<?php
/*
if (!function_exists('getallheaders')) {
    function getallheaders() {
        foreach ($_SERVER as $name => $value) {
            if (substr($name, 0, 5) == 'HTTP_') {
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
            }
        }
        return $headers;
    }
}
echo "server:<br>";
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
echo "<hr>";
echo "headers:<br>";
echo "<pre>";
print_r(getallheaders());
echo "</pre>";
*/

$url = "http://127.0.0.1:8090/tielu/2.php";
$save_dir = "D:/MYOA/webroot/guoziwei/download";

//$res = getFile($url, $save_dir, $filename, 1);
//var_dump($res);




$re=curlPost($url,$data='');
//echo $re;
$arr=json_decode($re);
//print_r($arr);
$msg=iconv("utf-8","gb2312",$arr->msg);
//echo $msg;
if($msg!="无新文件"){
	//$filename = $_REQUEST['filename'];
	if($filename==""){
		$filename = date("YmdHis").".zip";
		}
	$res = getFile($url, $save_dir, $filename, 1);
	var_dump($res);
	}
	
	
function getFile($url, $save_dir = '', $filename = '', $type = 0) {
    if (trim($url) == '') {
        return false;
    }
    if (trim($save_dir) == '') {
        $save_dir = './';
    }
    if (0 !== strrpos($save_dir, '/')) {
        $save_dir.= '/';
    }
    //创建保存目录
    if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
        return false;
    }
    //获取远程文件所采用的方法
    if ($type) {
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		
  		curl_setopt($ch, CURLOPT_HEADER, TRUE);  //需要response header
  		curl_setopt($ch, CURLOPT_NOBODY, FALSE);  //需要response body
        $content = curl_exec($ch);
       // curl_close($ch);
	  
	   /*****************************/
	$response = $content;
  //分离header与body
  $header = '';
  $body = '';
  if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
	 
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //头信息size
    $header = substr($response, 0, $headerSize);
	//var_dump($header);

    $body = substr($response, $headerSize);
	//echo $header."<hr>";
	//echo $body."<hr>";
	$farr = array();
  if(preg_match('/Content-Disposition: .*filename=([^ ]+)/', $header, $matches)) {
	 //  print_r($matches);
	   $farr=explode("\n",$matches[1]);
	 //  print_r($farr);
	   $filename=substr($farr[0],0,-1);
//rename($filename, $targetPath . $matches[1]);

		}
	
  }
  /*****************************/
  
  		curl_close($ch);
		
		
		
		
		
		
    } else {
        ob_start();
        readfile($url);
        $content = ob_get_contents();
        ob_end_clean();
    }
    $size = strlen($content);
    //文件大小
	if($filename==""){
		$filename = date("YmdHis").".zip";
		}
    $fp2 = @fopen($save_dir . $filename, 'a');
    fwrite($fp2, $content);
    fclose($fp2);
    unset($content, $url);
    return array(
        'file_name' => $filename,
        'save_path' => $save_dir . $filename
    );
}	

	


function curlPost($url,$data=array())
    {
		//echo "aaaa";
  		$ch1 = curl_init();
        $params[CURLOPT_URL] = $url;    //请求url地址
        $params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
        $params[CURLOPT_SSL_VERIFYPEER] = false;
        $params[CURLOPT_SSL_VERIFYHOST] = false;
        $params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
        $params[CURLOPT_POST] = true;
        $params[CURLOPT_POSTFIELDS] = $data;
        curl_setopt_array($ch1, $params); //传入curl参数
        $content = curl_exec($ch1); //执行
        curl_close($ch1); //关闭连接
      //  echo $content."4444";
    	return $content;
    
	}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hai7425

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值