Я пытаюсь проверить, существует изображение или нет на удаленном 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
,
Как мне решить эту проблему? любая помощь приветствуется, спасибо!
Вместо проверки доступности и размера изображения в 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 без перенаправления, он может выдать ошибку.
Других решений пока нет …