Php 检查有无http/https的远程URL上是否存在映像

Php 检查有无http/https的远程URL上是否存在映像,php,laravel,Php,Laravel,我正在尝试检查远程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)

我正在尝试检查远程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;   
    }

});
Validator::extend('valid\u img\u url',函数($attribute,$value,$parameters,$Validator){
$handle=curl\u init($value);
curl_setopt($handle,CURLOPT_RETURNTRANSFER,TRUE);
$response=curl\u exec($handle);
$httpCode=curl\u getinfo($handle,CURLINFO\u HTTP\u CODE);

如果($httpCode>=200&&$httpCode而不是分两步检查可访问性和图像大小,则可以将其合并为一个步骤:

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');
}

如果没有,它将添加缺少的
http
。但是请记住,如果url只能通过https访问而没有任何重定向,它可能会抛出错误。

您可以在方法内部,在url不存在时,将
http://
https://
添加到url。我认为如果不想指定e,可以使用
/
xact协议,因此从
//webside.com
开始应该可以工作。这不是一个等效的方法:
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;   
    }
});