【问题标题】:Downloading multiple images using PHP cURL [duplicate]使用 PHP cURL 下载多个图像 [重复]
【发布时间】:2011-08-22 16:49:42
【问题描述】:

我想从网页(例如 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";
?>

【问题讨论】:

    标签: php curl


    【解决方案1】:
    foreach($matches as $img)
    

    应该改为

    foreach($matches[1] as $img)
    

    顺便说一句:你应该用 cURL 替换 file_get_contents,它的速度大约是 3 倍;)

    【讨论】:

      【解决方案2】:
      • $img 是图片的完整 URL 吗?
      • 图像是否受保护(使用引用)?

        $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);

      【讨论】:

        【解决方案3】:
        • www.yahoo.com 不是 URL,http://www.yahoo.com/ 是。
        • $img 是一个需要迭代的数组$matches[1]
        • 您都告诉 cURL 写入文件并检索结果。使用一个。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          • 2015-11-26
          • 2018-07-02
          • 2021-12-25
          • 2011-06-30
          • 2017-06-28
          • 2016-04-10
          相关资源
          最近更新 更多