588创业论坛

 找回密码
 快速注册
搜索
查看: 94|回复: 1

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

[复制链接]
匿名
匿名  发表于 2023-11-1 18:44:16
本文演示3个从远程URL下载图片,并保存到本地文件中的方法,包括file_get_contents,curl和fopen。
1. 使用file_get_contents
function dlfile($file_url, $save_to)
{
$content = file_get_contents($file_url);
file_put_contents($save_to, $content);
}


2.使用CURL
function dlfile($file_url, $save_to)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch,CURLOPT_URL,$file_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$file_content = curl_exec($ch);
curl_close($ch);
$downloaded_file = fopen($save_to, 'w');
fwrite($downloaded_file, $file_content);
fclose($downloaded_file);
}


3.使用fopen
function dlfile($file_url, $save_to)
{
$in=    fopen($file_url, "rb");
$out=   fopen($save_to, "wb");
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
匿名
匿名  发表于 2023-11-2 15:30:01
赠送个比较全的curl代码



/**
* CURL请求函数:支持POST及基本header头信息定义

* @param [api_url:目标url | post_data:post参数 | header:头信息数组 | referer_url:来源url]
* @return [code:状态码(200执行成功、400执行异常) | data:数据]
*/
function curl_request($api_url, $post_data = [], $header = [], $referer_url = ''){   
    $ch = curl_init();//初始化CURL句柄
    curl_setopt( $ch, CURLOPT_URL, $api_url);

    /**配置返回信息**/
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);//获取的信息以文件流的形式返回,不直接输出
    curl_setopt( $ch, CURLOPT_HEADER, 0);//不返回header部分

    /**配置超时**/
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10);//连接前等待时间,0不等待
    curl_setopt( $ch, CURLOPT_TIMEOUT, 5);//连接后等待时间,0不等待。如下载mp3

    /**配置页面重定向**/
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);//跟踪爬取重定向页面
    curl_setopt( $ch, CURLOPT_MAXREDIRS, 10);//指定最多的HTTP重定向的数量
    curl_setopt( $ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer

    /**配置Header、请求头、协议信息**/
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt( $ch, CURLOPT_ENCODING, "");//Accept-Encoding编码,支持"identity"/"deflate"/"gzip",空支持所有编码
    curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" );//模拟浏览器头信息
    $referer_url && curl_setopt( $ch, CURLOPT_REFERER, $referer_url);//伪造来源地址
    //curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );    //设置curl使用的HTTP协议

    /**配置POST请求**/
    if($post_data && is_array($post_data)){
        curl_setopt( $ch, CURLOPT_POST, 1 );//支持post提交数据
        curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($post_data));//
    }   

    /**禁止证书验证防止curl输出空白**/
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//禁止 cURL 验证对等证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//是否检测服务器的域名与证书上的是否一致

    $code = 200; //执行成功
    $data = curl_exec( $ch );
    //捕抓异常
    if (curl_errno($ch)) {
        $code = 400; //执行异常
        $data = curl_error($ch);
    }
    curl_close( $ch );   

    return ['code' => $code, 'data' => $data];
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

Archiver|手机版|588创业网 ( 闽ICP备08003622号-6 )

GMT+8, 2024-2-22 04:35 , Processed in 0.140691 second(s), 24 queries .

Powered by bbs.588cy.com

© 2001-2012 Discuz! X2.5

回顶部