【问题标题】:lacking photos from external Url php缺少来自外部 URL php 的照片
【发布时间】:2012-01-04 17:01:13
【问题描述】:

我正在使用服务器端从外部 url 获取照片。根据 SO 的建议,我正在使用简单的 php dom 库来获取它。但我在这方面缺乏表现。我的意思是对于某些网站,我无法获取所有照片。 $url 有示例外部站点,它没有给我所有的图像。

  $url
  ="http://www.target.com/c/baby-baby-bath-bath-safety
  /-/N-5xtji#?lnk=nav_t_spc_3_inc_1_1";
  $html = file_get_contents($url);
  $doc = new DOMDocument();
  @$doc->loadHTML($html);
  $tags = $doc->getElementsByTagName('img');

  foreach ($tags as $tag) {
      echo $imageUrl = $tag->getAttribute('src');
   echo "<br />";
  }

这是否可能我可以拥有类似于 Firefox 选项的功能/准确性

Firefox->工具->页面信息->媒体

我的意思是我只是想更准确一点,因为现有库没有获取所有图像。我还尝试了 file_get_content ...这也没有获取所有图像。

【问题讨论】:

  • 你有没有超时 (max_execution_time)?
  • 如果您执行echo $html;,您会注意到 HTML 不存在。 hello, We’re experiencing some technical difficulties, sorry for the inconvenience. - 这可能是为了阻止屏幕抓取。是否可以为此使用 iframe?
  • 我不确定在这个场景中使用 iframe。但我只想从外部 url 获取图像以在我的书签中使用。它将在任何网站上弹出。
  • 好好问他们,如果他们同意,就复印一份,然后在当地送达。

标签: php html dom


【解决方案1】:

您需要使用正则表达式来获取图像的 src。 DOMDocument 在内存中构建所有 DOM 结构,你不需要它。当您获取 URL 时,使用 file_get_contents() 并将数据写入文件。如果您要解析很多页面,还请添加max_execution_time

【讨论】:

  • 根据 SO 最后的建议,我需要使用服务器端脚本获取图像。为此,我将使用 file_get_contents 或 dom libraray。但问题是它没有为我提供几乎所有图像的图像。相同的脚本适用于其他网站。
  • DOM 库只是将字符串(HTML)转换为具有其(对象)属性的对象模型(例如:$html->img->src)。每个对象都会占用一些内存,当您在 DOM 库中获取所有页面时,您会在页面上获得与标签一样多的对象。之后,您搜索图像并从中仅获取 1 个属性:src。从 1 个步骤,从 1 个字符串(HTML)中找到 src 的正确方法。现在谈谈 file_get_contents 和超时。也许某些主机太慢了,您的服务器认为他无法拍摄图像。这样你应该通过cURL函数获取图像
  • 所以我是否需要在这里使用 curl。因为我无法使用 file_get_contents 获取图像?
  • 是的,我认为这是最好的解决方案。
  • 感谢 Egor.. :)...实际上我正在尝试制作类似于 myregstry.com 的东西。如果有机会,请查看其中的“添加到我的注册表”功能...再次感谢
【解决方案2】:

从远程服务器下载图片

function save_image($sourcePath,$targetPath)
  { 

      $in  = fopen($sourcePath, "rb");
      $out = fopen($targetPath, "wb");
      while ($chunk = fread($in,8192))
      {
          fwrite($out, $chunk, 8192);
      }
      fclose($in);
      fclose($out);
  }

$src = "http://www.example.com/thumbs/thumbs-t2/1/ts_11083.jpg"; //image source
$target = dirname(__FILE__)."/images/pic.jpg"; //where to save image with new name
save_image($src,$target);

【讨论】:

  • 感谢您的回复,但我只想从外部网站获取并显示图像,然后用户将选择一个并将其保存在服务器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2015-03-26
相关资源
最近更新 更多