使用PHP cURL下载多个图像

时间:2011-05-10 18:06:11

标签: php curl

我想从网页下载图片,例如www.yahoo.com,并使用PHP将其存储在一个文件夹中。

我使用file_get_contents()获取页面源并解压缩img src标记。我将此src传递给cURL代码。代码不会给出任何错误,但图像不会被下载。请查看代码。我没有得到我错的地方。

<?php
    $html = file_get_contents('www.yahoo.com');
    $ptn = '/< *img[^>]*src *= *["\']?([^"\']*)/i';
    preg_match_all($ptn, $html, $matches, PREG_PATTERN_ORDER);
    $seq = 1;
    foreach($matches as $img)
    {
        $fp = fopen("root/Images/image_$seq.jpg", 'wb');
        $ch = curl_init ($img);
        curl_setopt($ch,CURLOPT_FILE, $fp);
        curl_setopt($ch,CURLOPT_URL, $img);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
        $image = curl_exec($ch);
        curl_close($ch);
        fwrite($fp, $image);
        fclose($fp);
        $seq++;
    }
    echo "IMAGES DOWNLOADED";
?>

3 个答案:

答案 0 :(得分:1)

foreach($matches as $img)

应改为

foreach($matches[1] as $img)

BTW:你应该用cURL替换file_get_contents,它的速度大约是3倍;)

答案 1 :(得分:0)

  • $ img是图片的完整URL吗?
  • 图像是否受到保护(使用referer)?

    $image = false;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_REFERER,$url);
    curl_setopt($ch, CURLOPT_URL, $url );
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 7);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_ENCODING,gzip);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    $image = curl_exec ($ch);
    

首先尝试调试。

首先使用来自Yahoo http://www.depers.nl/beeld/w100/2011/201105/20110510/anp/sport/img-100511-349.onlinebild.jpg的单个图片进行尝试。

另外,为什么要使用file_get_contents和curl?改为使用curl。

  1. 为cURL创建一个函数:function simple_curl ( $url,$binary=false){ set your cURL vars, return curl_exec)
  2. 获取yahoo.com:$result = simple_curl($url);
  3. 获取模式的链接(检查匹配项是否包含完整的URL(域+目录+文件)。
  4. 循环每个模式匹配(不要忘记:多数组!所以循环$matches[1])。
  5. 卷曲二进制文件并保存:$image = simple_curl($match,true);

答案 2 :(得分:0)

  • www.yahoo.com不是网址,http://www.yahoo.com/是。
  • $ img是您需要迭代$matches[1]
  • 的数组
  • 你们都告诉cURL写一个文件并检索结果。使用一个。

我不知道你怎么看错误。我会调查一下。复制和粘贴然后运行它给了我很多错误。