2017-09-12 1 views
1

リモート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がhttpまたはhttpsなしでwebsite.comである場合、私はこのエラーgetimagesize(website.com): failed to open stream: No such file or directoryを受け取ります。

この問題を解決するにはどうすればよいですか?どんな助けもありがとう!

+0

あなたのメソッドの中では、URLが存在しないときにURLに 'http://'または 'https://'を追加することができます。正確なプロトコルを指定したくない場合には、 '//'を使うことができると思いますので、 '// webside.com'で始めることが有効です。 –

答えて

1

代わりに2つの段階でアクセシビリティと画像サイズを確認する、あなたが1でそれを組み合わせることができます:

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経由でのみアクセスできるのであれば、エラーが発生する可能性があることに注意してください。

+0

これは同等の方法ではありません: 'getimagesize()'はサポートされているイメージファイル形式であるかどうかを教えてくれます。 –

+0

@KIKOSoftwareが私の答えを更新しました – mimo

+0

コードのコードをコードとしてフォーマットできますか? –

関連する問題