Home Backend Development PHP Tutorial PHP批量下载指定路径图片实例

PHP批量下载指定路径图片实例

Apr 24, 2017 am 10:01 AM

知道服务器上图片所保存的路径,如何批量下载到本地,其中850文件夹及014文件名都从000开始匹配,文件存在就下载,否则略过。

以下代码只能下载指定页面的:(望大神指教,谢过!)

<?php

$url = "http://site.com/";
$content=file_get_contents($url);
$reg="//";

preg_match_all($reg,$content,$matches);
Copy after login

以下代码只能下载指定页面的:(,望大神指教,谢过!

<?php

$url = "http://site.com/";
$content=file_get_contents($url);
$reg="//";

preg_match_all($reg,$content,$matches);

$path = './imgDownload';
if(!file_exists($path)){
    mkdir($path, 0777);
}

for($i = 0;$i < count($matches[1]);$i ++){

    /*explode
    $url_arr[$i] = explode('/', $matches[1][$i]);
    $last = count($url_arr[$i])-1;
    */

    //strrchr   
    $filename = strrchr($matches[1][$i], '/');

    downImage($matches[1][$i],$path.$filename);
    //downImage($matches[1][$i],$path.'/'.$url_arr[$i][$last]);
}

function downImage($url,$filename="") {
    if($url=="") return false;

    if($filename=="") {
        $ext=strrchr($url,".");
        if($ext!=".gif" && $ext!=".jpg" && $ext!=".png" && $ext!="jpeg") return false;
        $filename=date("YmdHis").$ext;
    }

    ob_start();
    //make file that output from url goes to buffer
    readfile($url);
    //file_get_contents($url);  这个方法不行的!!!只能用readfile
    $img = ob_get_contents();
    ob_end_clean();

    $fp=@fopen($filename, "a");//append
    fwrite($fp,$img);

    fclose($fp);

    return $filename;
}
Copy after login

可以使用 curl_multi_* 系列函数批量请求远程地址。 把所有需要请求的页面放到一个数组里,每次并发20个去请求。
建议修改下程序思路,先批量根据页面地址获取需要下载的图片地址,第二步再批量处理图片下载。
两个部分的都可以用 culr_multi_*系列函数去并发处理。

代碼寫得太糟糕了,還有幾處錯誤,幫你重寫一份。

在一個循環里多次調用 addPage 就行了。

如果已經有 url 的話,也可以直接調用 download

for ($i = 0; $i &lt; 99; ++$i)
    download(&#39;http://cdn.image.com/static/&#39; . $i . &#39;.png&#39;, DOWNLOAD_PATH . $i . &#39;.png&#39;);
Copy after login

效率有點低,可以考慮改用 culr_multi_* 系列函數。

 $referer) {
        // echo $url, &quot;\n&quot;;
        $filename = pathinfo($url, PATHINFO_FILENAME) . &#39;.&#39; . pathinfo($url, PATHINFO_EXTENSION);
        download($url, $path . $filename, $referer);
    }
    // error_reporting(1);
}


function addPage($page, &amp;$urls) {
    $cur = extractPage($page);

    for ($i = 0, $n = count($cur); $i &lt; $n; ++$i) {
        $j = $cur[$i];

        if (!isset($urls[$j]))
            $urls[$j] = $page;
    }
}

function extractPage($page, $reg = &#39;//&#39;) {
    $content = file_get_contents($page);
    // $content = &#39;&#39;;
    preg_match_all($reg, $content, $matches);

    return $matches[1];
}

function download($url, $file, $referer = &#39;&#39;) {
    $url = abs_url($url, $referer);
    echo $url, &quot;\n&quot;;

    $opts = [
        &#39;http&#39; =&gt; [
            'method' =&gt; 'GET',
            'header' =&gt; "Accept-language: en\r\n" . 
                        // "Cookie: \r\n" .
                        "Referer: " . $url . "\r\n"
        ]
    ];

    $context = stream_context_create($opts);

    file_put_contents($file, file_get_contents($url, false, $context));

    return $file;
}

function abs_url($url, $referer) {
    $com = parse_url($url);

    if (!isset($com['scheme']))
        $com['scheme'] = 'http';

    if ($referer !== '') {
        $ref = parse_url($referer);

        if (!isset($com['host'])) {
            if (isset($ref['host'])) {
                $com['host'] = $ref['host'];
                if (!isset($ref['path']))
                    $ref['path'] = '/';
            }

            if (isset($com['path'][0])) {
                if ($com['path'][0] !== '/')
                    $com['path'] = $ref['path'] . $com['path'];
            } else if (isset($ref['host'])) {
                $com['path'] = $ref['path'];
            }
        } else {
            if (!isset($com['path']))
                $com['path'] = '';
        }
    }

    return unparse_url($com);
}

function unparse_url($com) {
    return (isset($com['host']) ? ($com['scheme'] . '://' . $com['host']) : '') . $com['path'] . (isset($com['query']) ? '?'.$com['query'] : '');
}
Copy after login
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

CakePHP Date and Time

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

CakePHP File upload

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

CakePHP Routing

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

CakePHP Project Configuration

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

Discuss CakePHP

CakePHP Quick Guide CakePHP Quick Guide Sep 10, 2024 pm 05:27 PM

CakePHP Quick Guide

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

How To Set Up Visual Studio Code (VS Code) for PHP Development

See all articles