php下载远程图片到本地

在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求
1:使用curl

比如我们有下面这两张图片:

$images = [
    ‘https://img.alicdn.com/tps/TB1jjaYOFXXXXa2aXXXXXXXXXXX-276-402.jpg_150x10000q90.jpg‘,
    ‘https://img.alicdn.com/tfs/TB15QQ5cgMPMeJjy1XbXXcwxVXa-520-280.jpg_q90_.webp‘
];

第一步,我们可以直接来使用最简单的代码实现:

function download($url, $path = ‘images/‘)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    $file = curl_exec($ch);
    curl_close($ch);
    $filename = pathinfo($url, PATHINFO_BASENAME);
    $resource = fopen($path . $filename, ‘a‘);
    fwrite($resource, $file);
    fclose($resource);
}

那么在下载远程图片的时候就可以这样:

foreach ( $images as $url ) {
    download($url);
}

1:封装成一个类
缕清思路之后,我们可以将这个基本的功能封装到一个类中:

class Spider {

    public function downloadImage($url, $path = ‘images/‘)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        $file = curl_exec($ch);
        curl_close($ch);
        $filename = pathinfo($url, PATHINFO_BASENAME);
        $resource = fopen($path . $filename, ‘a‘);
        fwrite($resource, $file);
        fclose($resource);
    }
}    

或者,我们还可以这样稍微优化一下:

class Spider {

    public function downloadImage($url, $path=‘images/‘)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        $file = curl_exec($ch);
        curl_close($ch);

        $this->saveAsImage($url, $file, $path);
    }

    private function saveAsImage($url, $file, $path)
    {
        $filename = pathinfo($url, PATHINFO_BASENAME);
        $resource = fopen($path . $filename, ‘a‘);
        fwrite($resource, $file);
        fclose($resource);
    }
}    

封装成类之后,我们可以这样调用代码来下载图片:

$spider = new Spider();

foreach ( $images as $url ) {
    $spider->downloadImage($url);
}

这样,对一般可访问的远程图片下载就OK了....

时间: 2024-12-08 23:39:48

php下载远程图片到本地的相关文章

thinkphp下载远程图片到本地

$url="http://www.test.com/test.jpg";//图片远程地址 $local="./Upload/test/test.jpg";//下载到本地存放的目录 import("ORG.Net.Http"); \Org\Net\Http::curlDownload($url,$local);

使用ThinkPHP自带的Http类下载远程图片到本地的实现代码

private function downimg($text,$title){ $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";//匹配图片的正则式 if(preg_match_all($pattern, $text, $matches)) { //类库 $http = new \Org\Net\Http(); $image = new \

PHP通过url下载远程图片到本地

function GrabImage($url,$filename) { if($url==""):return false;endif; ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); //"../../images/books/"为存储目录,$filename为文件名 [email protected]("upfile

PHP下载/采集远程图片到本地

/** * 下载远程图片到本地 * * @param string $url 远程文件地址 * @param string $filename 保存后的文件名(为空时则为随机生成的文件名,否则为原文件名) * @param array $fileType 允许的文件类型 * @param string $dirName 文件保存的路径(路径其余部分根据时间系统自动生成) * @param int $type 远程获取文件的方式 * @return json 返回文件名.文件的保存路径 * @au

织梦5.7下载远程图片和资源无效全套最新解决方案

1.织梦5.7下载远程图片和资源无效可能是因为服务器上禁用了fsockopen() 函数造成的,在用fsockopen()的地方用 stream_socket_client()代替就可以了. 具体修改地方是 /include/dedehttpdown.class.php 第507行 $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10); 替换为 $this->m_fp = @stream

ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片

ASP.NET下载远程图片保存到本地的方法.保存抓取远程图片 2012-05-16 11:25:51     我来说两句      收藏    我要投稿 以下介绍两种方法:1.利用WebRequest,WebResponse 类WebRequest wreq=WebRequest.Create("http://up.2cto.com/2012/0516/20120516112717995.gif");    HttpWebResponse wresp=(HttpWebResponse)

dede不能下载远程图片及如何实现图片本地化的方法

有些时候我们想保存图片到本地服务器的时候发现保存不了,比如我们自己拷贝自己的站点到另外一个服务器等等,下面3A网络的小钱就来分享Dedecms无法保存远程图片到本地服务器的解决方法,分享给大家供大家参考.具体分析如下: 一.开启远程图片本地化 在编辑区域上方有个附加选项:下载远程图片和资源,把这个选上即可!也在可以在系统设置里面的其他选项把:远程图片本地化这个项目给选上! 二.检查网站目录 上传图片目录中是否有allimg这个文件夹(当更改了图片上传目录的情况下最容易出现这个问题) 三.可能是因

php 保存编辑器内容中的远程图片为本地图片

有时,我们的编辑器复制过来的图片是远程的,需要下载到本地服务器上. 1.提取远程图片 /* *功能:php完美实现下载远程图片保存到本地 *参数:文件url,保存文件目录,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ private function getImage($url,$filename='',$type=0){ if(trim($url)==''){ return array('file_name'=>'','save_path'=>'','e

抓取远程图片到本地,你会用什么函数?

方式有: <?php $img = file_get_contents('http://www.xfcodes.com/ img/baidu_logo.gif'); file_put_contents('1.gif',$img); echo '<img src="1.gif">'; 这段抓取远程图片至本地在运行中360极速.火狐.谷歌没有出现错误,可以正常运行. 另外还有: <?php $pagecontent = file_get_contents('http