如何在php中检查大量远程图像的存在

时间:2015-04-23 06:54:01

标签: php

我在PHP网页上显示大量远程图像,我需要检查图像是否按顺序存在 - 以处理没有图像条件。但是这个过程需要很大的负担才能检查每个远程文件的状况。请有人建议您处理此问题。

提前致谢。

3 个答案:

答案 0 :(得分:2)

我认为有几种解决方案

  1. 如果您在网页上显示远程图像(那些不在您服务器上的图像),您可以通过javascript检查图像是否存在。我的意思是创建图像并检查它是否已加载。然后通过javascript处理异常。
  2. 您可以在向用户显示之前检查图像是否存在。例如,将它们添加到您的网站时。因此,您只需执行一次,将结果存储在数据库中,然后仅显示您知道存在的那些图像。
  3. 有一个PHP函数curl_multi_exec。它允许您同时执行多个http请求。
  4. 您最好将这些图像复制到服务器。如果这样做,您将确保图像仍然存在且未被修改。

答案 1 :(得分:0)

不要获取整个文件,只需检查请求远程图像是否返回HTTP状态代码200(已找到)或其他内容(例如404未找到)。

试试这个答案:How can one check to see if a remote file exists using PHP?

  

您可以通过CURLOPT_NOBODY指示curl使用HTTP HEAD方法。

     

或多或少

   $ch = curl_init("http://www.example.com/favicon.ico");

   curl_setopt($ch, CURLOPT_NOBODY, true);
   curl_exec($ch);
   $retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   // $retcode >= 400 -> not found, $retcode = 200, found.
   curl_close($ch);

答案 2 :(得分:0)

这样的事情可能有用。

<script type="text/javascript">
  //Example error handling
  var imgPlaceHolder = '//example.com/no-img.jpg';
  var handelImageNotFound = function (imgId) {
    $('#' + imgId).attr("src", imgPlaceHolder);
  }
</script>

<?php
$imgList = [
    '//example.com/foo1.jpg',
    '//example.com/foo2.jpg',
    '//example.com/baz.jpg',
];
?>

<?php for ($index = 0; $index < count($imgList); $index++): ?>
  <img src="<?= $imgList[$index] ?>" id="img_<?= $index ?>" onerror="handelImageNotFound('img_<?= $index ?>')" />
<?php endfor; ?>

现在你必须编写一个javascript方法&#34; handelImageNotFound(imgId)&#34;处理缺失图像的功能。