проверьте, существует ли изображение, и занимает ли оно много времени, если изображение недействительно - PullRequest
0 голосов
/ 11 июня 2018

У меня есть функция, чтобы проверить, является ли изображение действительным, и если оно печатается, 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="">';
}

проблема в том, что я не знаю, почему страница занимает так много времени вURL выше.Изображение больше не существует.и 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 голосов
/ 12 июня 2018

Я проверил ваш код, и он не медленный, я предлагаю вам проверить конфигурацию или настройку вашего сервера, для проверки скорости вашего кода вы можете использовать cli (php в терминале)

0 голосов
/ 12 июня 2018

Я добавляю это, чтобы ограничить время поиска изображения.Я не знаю, лучший ли это путь, но ...

ini_set('default_socket_timeout', 5);
0 голосов
/ 11 июня 2018

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).
Это не причина для медленного кода, но это совершенно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...