php curl get 下载远程zip文件保存在本地例子

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php curl get 下载远程zip文件保存在本地例子相关的知识,希望对你有一定的参考价值。

目前只知道用php 下载图片,但是对于6M这样大小的zip文件就不知道怎么下载了,用相同的代码似乎会下载不全,新学PHP编程,请大家指教!

<?php

if($_POST['submit'])
$url=$_POST['url']; //取得提交过来的地址http://hu60.cn/wap/0wap/addown.php/fetion_sms.zip
$url=urldecode($url);
$fname=basename("$url"); //返回路径中的文件名部分 fetion_sms.zip
$str_name=pathinfo($fname); //以数组的形式返回文件路径的信息
$extname=strtolower($str_name['extension']); //把扩展名转换成小写
//$uptypes=explode(",",$forum_upload); //取得可以上传的文件格式
//$size=getFileSize($url);

$time=date("Ymd",time());

$upload_dir="./upload/";//上传的路径
$file_name=$time.rand(1000,9999).'.'.$fname;
$dir=$upload_dir.$file_name;//创建上传目录

//判断目录是否存在 不存在则创建
if(!file_exists($upload_dir))
mkdir($upload_dir,0777,true);


$contents=curl_download($url,$dir);

if($contents)
echo "下载成功";
else
echo "下载失败";




function curl_download($url, $dir)
$ch = curl_init($url);
$fp = fopen($dir, "wb");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res=curl_exec($ch);
curl_close($ch);
fclose($fp);
return $res;


?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>远程下载文件</title>
<form name="upform" method="post" action="" enctype='multipart/form-data'>
<input name='url' type='text' size='20'/>
<input type='submit' name='submit' value='远程下载'/>
</form>
</body>
</html>追问

运行之后没有显示下载成功或失败,应该是没运行成功吧,不知道哪里出了问题。

追答

你看有文件下载成功没。

追问

也没有找到文件。

追答

curl扩展 开了没? 我这里可以的哦。

追问

开了,我另在网上找到了一段PHP代码下成功了你给的链接,你给的代码我真的没能下到文件。。。不过你给的解析很清晰,我能看懂。谢谢!

参考技术A 可以调用系统的下载命令:wget
exec()追问

我是Mac电脑Unix系统,没有wget命令,用curl应该也可以下,在命令行可以运行,但是不知道怎么写成PHP程序。。。

追答$cmd = 'curl "http://url.com/xxx"';//这里完全是系统命令
exec($cmd, $output, $return);// $output参数是接受执行完系统命令的返回值。$return是执行状态
if($return == 0)
    var_dump($output[0]);
else
    // error

追问

这样运行似乎效率很低,感觉就是在用命令行执行了。我想用的是curl_exec(),现在找到可运行的代码执行下载了,谢谢!

参考技术B 获得图片路径之后,直接根据路径写下载方法就行了

如何使用 PHP 下载 .zip 文件

【中文标题】如何使用 PHP 下载 .zip 文件【英文标题】:How to download .zip file using PHP 【发布时间】:2017-10-20 08:24:00 【问题描述】:

我的网站在http://domain1.com,我想从另一个域http://domain2.com/uploads/data.zip 下载一些.zip 文件,但没有下载并显示302 移动临时错误。我正在使用 cURL 代码。

header('Access-Control-Allow-Origin: http://www.domain2.com');
header('Content-Length: '.filesize($response));  
header('Content-Type: application/zip');
header('Content-Transfer-Encoding: Binary');  
header("Content-Disposition: attachment; filename=my.zip");
//readfile($response);
header("Location:$response");

【问题讨论】:

卷曲代码在哪里?? Is there a way to follow redirects with command line cURL的可能重复 【参考方案1】:

只需在项目根目录创建一个 php 文件。比如“test.php”

现在在“test.php”文件中添加以下代码。

file_put_contents("zipname.zip", fopen("http://domain2.com/uploads/data.zip", 'r'));

这是使用 php 下载文件的最快、最简单的方法。

更多详情见下文

https://thecodingstuff.com/php-download-archive-file-from-url/

【讨论】:

以上是关于php curl get 下载远程zip文件保存在本地例子的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中从 cURL GET 请求保存 .zip 文件

PHP下载远程图片的3个方法

php 如何下载远程文件到本地重命名

cURL下载Zip文件 - “参数不是有效的文件句柄资源”

php远程获取图片或文件信息(get_headers, fsocketopen, curl)

需要php脚本在远程服务器上下载文件并保存在本地