Как эффективно проверить много URL-адресов, если они являются изображениями в PHP - PullRequest
0 голосов
/ 24 апреля 2020

Как я могу надежно, эффективно и быстро проверять сотни URL-адресов из строки HTML одновременно, если они являются URL-адресами изображений? Я попытался использовать методы "get_headers" и "getimagesize" ниже, но мой сервер просто зависает из-за проблем с памятью (ошибка 500).

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

function getUrls($string){
$regex = '/https?\:\/\/[^\" ]+/i';
preg_match_all($regex, $string, $matches);
return ($matches[0]);
}

$website_html = file_get_contents($website_url);
$urls = getUrls($website_html); 

Метод 1:

foreach($urls as $url){
if ($headers = get_headers($url, 1)){
$type = $headers["Content-Type"];
if(is_array($type)){
$is_image = strpos($type[1],'image');
} // end if image array
else{
$is_image = strpos($type,'image');
} // end else
if($is_image !== false){
echo 'Image: <a href="'.$url.'">'.$url.'</a><br/>';
} // end if is image
} // end if get headers

Метод 2:

foreach($urls as $url){
if (getimagesize($url)){
echo 'Image: <a href="'.$url.'">'.$url.'</a><br/>';
} // end if getimagesize

В обоих случаях возникает ошибка 500, особенно при проверке более одного веб-сайта html.

Метод 3:

foreach($urls as $url){
if (file_exists($url)) {
echo 'Image: <a href="'.$url.'">'.$url.'</a><br/>';
}
}

Метод 3 не работает, URL не возвращаются вообще.

...