PHP检查图像是否存在,如果不存在则返回文本

时间:2018-01-26 13:25:13

标签: php php-curl getimagesize

我找到了这个解决方案,因为@getimagesize非常慢:

function get_image_by_id($ID)
{
$url = $ID;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$info = curl_getinfo($ch);
if(file_get_contents($url) == NULL)
{
    return NULL;
}
else
{
    return $url;
}
}

它工作得非常快但是这个功能总是试图加载图像,即使它不存在。以下是我在代码中的实现方式:

<?php if (get_image_by_id($link)): ?>
    <?php echo '<img src="' . $link . '" alt="' . $propname . '" />'; ?>
<?php endif; ?>

只有在图像不存在的情况下才需要使用其他内容,然后才能从数组中回显$propname

使用is_null它有效,但速度与@getimagesize相同(慢)。

所以现在看起来像是:

<?php if (is_null(get_image_by_id($link))): ?>
    <?php echo $propname; ?>
<?php endif; ?>

如何为此制作快速代码:

if(image_exists($link) {
echo $image;
} else {
echo $propname;
}

2 个答案:

答案 0 :(得分:1)

使用Curl返回状态以识别图像是否存在

<?php
    function image_exist($url){
        $ch = curl_init($url);    
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        if($code == 200){
           $status = true;
        }else{
          $status = false;
        }
        curl_close($ch);
       return $status;
    }
    ?>

答案 1 :(得分:1)

您可以测试以查看卷曲响应,如果您有某些内容,请执行您的代码:

$output=curl_exec($ch);
if ($output === false || $info['http_code'] != 200) {
  //$output = "No cURL data returned for $url [". $info['http_code']. "]";
  //if (curl_error($ch))
  //  $output .= "\n". curl_error($ch);
  //}
  return null; //or $output
else {
  // 'OK' status; format $output data if necessary here: 
  return $url;
}

请勿忘记关闭卷曲连接curl_close($ch);