URLが画像のURLかどうかを確認する必要がありますか?これどうやってするの?
例:
http://www.google.com/
ではありません 画像のURL。http://www.Hoax-slayer.com/images/worlds-strongest-dog.jpg
です 画像のURL。https://stackoverflow.com/search?q=.jpg
ではありません 画像のURL。http://www.google.com/profiles/c/photos/private/AIbEiAIAAABECK386sLjh92M4AEiC3ZjYXJkX3Bob3RvKigyOTEzMmFmMDI5ODQ3MzQxNWQxY2VlYjYwYmE2ZTA4YzFhNDhlMjBmMAEFQ7chSa4PMFM0qw02kilNVE1Hpw
です 画像のURL。絶対に確認したい場合で、PHPがリモート接続に対して有効になっている場合は、次を使用できます。
getimagesize('url');
配列を返す場合、画像拡張子がURLにない場合でも(2番目のリンクごとに)PHPによって認識される画像タイプです。このメソッドはリクエストごとにリモート接続を確立することを覚えておく必要があります。そのため、データベースで既にプローブしたURLをキャッシュして、接続を減らします。
HEAD request をサーバーに送信してから、Content-typeを確認できます。このようにして、少なくともサーバーがタイプが何であるかを「考える」ことがわかります。
以下のようなgetimagesize関数を使用して、URLが画像であるかどうかを確認できます。
function validImage($file) {
$size = getimagesize($file);
return (strtolower(substr($size['mime'], 0, 5)) == 'image' ? true : false);
}
$image = validImage('http://www.example.com/image.jpg');
echo 'this image ' . ($image ? ' is' : ' is not') . ' an image file.';
アイデアはcurlを介してヘッダーURLのコンテンツを取得することだと思います
ヘッダーを確認してください
curl_exec()
を呼び出してWebページを取得した後、curl_getinfo()
を呼び出してHTTPヘッダーからコンテンツタイプ文字列を取得します
このリンクでそれを行う方法を見てください:
http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_content_type#IfyouareusingCURL
これを使用できます:
$is = @getimagesize ($link);
if ( !$is ) $link='';
elseif ( !in_array($is[2], array(1,2,3)) ) $link='';
elseif ( ($is['bits']>=8) ) $srcs[] = $link;
これはカールが必要な方法ですが、画像全体をダウンロードしないため、getimagesizeよりも高速です。免責事項:ヘッダーをチェックしますが、常に正しいとは限りません。
function is_url_image($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$output = curl_exec($ch);
curl_close($ch);
$headers = array();
foreach(explode("\n",$output) as $line){
$parts = explode(':' ,$line);
if(count($parts) == 2){
$headers[trim($parts[0])] = trim($parts[1]);
}
}
return isset($headers["Content-Type"]) && strpos($headers['Content-Type'], 'image/') === 0;
}
$ext = strtolower(end(explode('.', $filename)));
switch($ext)
{
case 'jpg':
///Blah
break;
}
ハードバージョン(試してみるだけ)
//Turn off E_NOTICE reporting first
if(getimagesize($url) !== false)
{
//Image
}