Php 检查图像是否存在,如果图像无效,则需要花费大量时间

Php 检查图像是否存在,如果图像无效,则需要花费大量时间,php,curl,Php,Curl,我有一个功能,以检查图像是否有效,如果它是打印在屏幕上的图像 <?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_hea

我有一个功能,以检查图像是否有效,如果它是打印在屏幕上的图像

<?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="">';
}

file\u get\u内容可以返回标题并设置最大超时

$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\u exists=true为什么?如果($url\u exists==true)


这不是代码慢的原因,但完全没有必要。

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

我添加此命令是为了限制搜索图像的时间。我不知道这是不是最好的方法,但是

ini_set('default_socket_timeout', 5);

用不同的图像试试看。。。您提供的图像链接没有直接链接到图像资源。@Jordan使用不同的图像链接。我要问的问题是,为什么在这种特殊情况下,要花这么多时间才能做出错误的回答。这个url中没有图像,但是php花了大约30秒的时间来回答false。看起来您依赖于标题中的404。如果某个站点正在为url(像那样)提供自定义输出。。。由于某些原因,它实际上可能不包含正确的标题。其“慢”的一个可能原因是,您正在访问的url正在等待机器人程序的速度,或者它只是一个蹩脚的服务器。@难以置信有什么办法可以避免这种延迟?它正在破坏我的网站。您是否尝试过条件:
if($url\u headers[0]=“HTTP/1.1 200 OK”){$url\u exists=true;
然后…
否则$url\u exists=false;
阅读上面的评论,不是真正的代码慢,而是来自远程服务器的返回响应。还要记住,将评论作为答案发布通常不受欢迎。你是否尝试过我的建议?@Andreas我尝试过了!但我不知道为什么,是时候了我不知道我是否把$options放在了正确的位置…或者其他什么。ini_集合可以工作。
ini_set('default_socket_timeout', 5);