URLからcurlを介して、いくつかの情報を取得し、それが画像であるかどうかを確認する必要があります。
$result = curl_exec($ch);
更新:コンテンツタイプのチェックは、偽造される可能性があるため、お勧めできません。
私は個人的にPHP内のgdツールを使用して、そのイメージかどうかを確認します。ソースがヘッダー内で正しいMIMEを提供することを信頼することはできません。私は何度もヘッダーを信頼し、コンテンツが画像であるが(URL /サーバーの動作方法のために)別の形式で転送されたという事実に失望しました。
function getContentType($url)
{
$curl = curl_init();
curl_setopt_array( $curl, array(
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_URL => $url ) );
curl_exec( $curl ); //execute
$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE); //get content type
curl_close( $curl );
return $contentType;
}
上記の関数はタイプを返し、uはimage
返された値の部分文字列をチェックできます
Content-type
1つの方法は、HTTPヘッダー、特にヘッダーを読み取り、それが画像であるかどうかを評価することだと思います。
このSOの質問では、curlを使用してhttpヘッダーを確認する方法について説明します。
これを使用して、MIMEタイプを取得します。
echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
一般的な画像のmimeタイプに対して使用します。image / gif、image/pngなど。
CURLOPT_HEADER
を介して設定することにより、出力にHTTPヘッダーを含めます。CURLOPT_NOBODY
コンテンツタイプのみに関心がある場合は、設定してリクエストメソッドをHEADに設定することもできます。
$c = curl_init();
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $c, CURLOPT_CUSTOMREQUEST, 'HEAD' );
curl_setopt( $c, CURLOPT_HEADER, 1 );
curl_setopt( $c, CURLOPT_NOBODY, true );
curl_setopt( $c, CURLOPT_URL, 'your.url' );
curl_exec($c);
$content_type = curl_getinfo($c, CURLINFO_CONTENT_TYPE);
そして、許可されたコンテンツタイプを確認します。
getimagesizeを使用できます
<?php
$i = getimagesize('http://static.adzerk.net/Advertisers/bd294ce7ff4c43b6aad4aa4169fb819b.jpg');
print_r($i);
出力
Array
(
[0] => 220
[1] => 250
[2] => 2
[3] => width="220" height="250"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
画像ではない場合は、false
$i = getimagesize('http://stackoverflow.com');
var_dump($i);
出力:
bool(false)