如果图像无效,请检查图像是否存在花费很长时间

时间:2018-06-11 20:33:43

标签: php curl

我有一个功能来检查图像是否有效,以及是否在屏幕上打印img。

<?php
function isImage($url){

$url_headers=get_headers($url, 1);

if($url_headers[0] == 'HTTP/1.1 404 Not Found') {
   $url_exists = false;
} 
else {
    $url_exists = true;
}

if($url_exists){
    if(isset($url_headers['Content-Type'])){
        $type=strtolower($url_headers['Content-Type']);

        $valid_image_type=array();
        $valid_image_type['image/png']='';
        $valid_image_type['image/jpg']='';
        $valid_image_type['image/jpeg']='';
        $valid_image_type['image/jpe']='';
        $valid_image_type['image/gif']='';

        if(isset($valid_image_type[$type])){
            return true;
        }
        else{
            return false;
        }
    }
}
}

if(isImage("http://curiosidadeslegais.org/wp-content/uploads/2016/08/zuera-pa-w5app.jpg")){
echo '<img src="http://curiosidadeslegais.org/wp-content/uploads/2016/08/zuera-pa-w5app.jpg" alt="">';
}

问题是我不知道为什么页面在上面的网址中占用了这么长时间。图像不再存在。和html打印:

<html>
<head>
<meta name="robots" content="noarchive" />
<meta name="googlebot" content="nosnippet" />
</head>
<body>
<div align=center>
<h3>Error. Page cannot be displayed. Please contact your service provider for more details.  (9)</h3>
</div>
</body>
</html>

我不知道为什么要花很长时间来验证它不是图像并忽略它。任何想法为什么?

应该快速检查图像是否存在以进行打印。但在这种情况下需要很长时间。

3 个答案:

答案 0 :(得分:1)

file_get_contents可以返回标头并设置最大超时。

$options = stream_context_create(array('http'=>
array(
    "timeout" => 1, // one second
    "method" => "GET",
    "header" => "Accept-language: en\r\n" .
        "Cookie: foo=bar\r\n"
  )
));

$url_headers = file_get_contents($url, false, $options);

由于我在手机上打字,这是未经测试的。

我在代码中注意到的另一件事是$url_exists = true;为什么?为什么不直接移动下面的代码并将上面的行替换为if($url_exists == true)内的所有内容 这不是代码慢的原因,但它完全没必要。

答案 1 :(得分:0)

我检查了你的代码并且它并不慢,我建议你检查一下你的服务器配置或设置, 为了检查您的代码速度,您可以使用cli(终端中的php)

答案 2 :(得分:0)

我添加此项以限制搜索图像的时间。我不知道这是不是最好的方式,但是......

var my_changeRuleFunc = function(rule) {
    rule.style.fontSize = '20px';
}

var my_selectorFunc = function(rule) {
    return rule.selectorText == '.myClass'; // return true to select this rule
}

change_css_rules(my_changeRuleFunc, my_selectorFunc); // apply change to selected rules