Проверьте, существует ли изображение на удаленном URL с или без http / https

Я пытаюсь проверить, существует изображение или нет на удаленном URL.

Что у меня так далеко:

Validator::extend('valid_img_url', function ($attribute, $value, $parameters, $validator) {
$handle = curl_init($value);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode >= 200 && $httpCode <= 400) {
return getimagesize($value) !== false;
}

});

Это будет работать нормально, если данный удаленный URL, например, https://website.com, Но когда данный удаленный URL website.com без http или же httpsЯ получил эту ошибку getimagesize(website.com): failed to open stream: No such file or directory,

Как мне решить эту проблему? любая помощь приветствуется, спасибо!

1

Решение

Вместо проверки доступности и размера изображения в 2 этапа, вы можете объединить его в один:

Validator::extend('valid_img_url', function ($attribute, $value, $parameters, $validator) {
$ch = curl_init($value);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);

$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
$mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
return $httpCode >= 200 && $httpCode <= 400 && $size > 0 && substr($mime, 0, 5) == 'image');
}

Чтобы использовать силу getimageSize Вы можете добавить этот кусок кода:

Validator::extend('valid_img_url', function ($attribute, $value, $parameters, $validator) {
$handle = curl_init($value);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode >= 200 && $httpCode <= 400) {
if (!preg_match("~^(?:f|ht)tps?://~i", $value)) {
$value = "http://" . $value;
}
return getimagesize($value) !== false;
}
});

Это добавит недостающие http если нет никого Но помните, что если URL доступен только через https без перенаправления, он может выдать ошибку.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector