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