-3

URLからcurlを介して、いくつかの情報を取得し、それが画像であるかどうかを確認する必要があります。

$result = curl_exec($ch);

更新:コンテンツタイプのチェックは、偽造される可能性があるため、お勧めできません。

4

7 に答える 7

3

私は個人的にPHP内のgdツールを使用して、そのイメージかどうかを確認します。ソースがヘッダー内で正しいMIMEを提供することを信頼することはできません。私は何度もヘッダーを信頼し、コンテンツが画像であるが(URL /サーバーの動作方法のために)別の形式で転送されたという事実に失望しました。

于 2012-07-31T10:50:27.560 に答える
1
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返された値の部分文字列をチェックできます

于 2012-07-31T10:49:04.197 に答える
0

Content-type1つの方法は、HTTPヘッダー、特にヘッダーを読み取り、それが画像であるかどうかを評価することだと思います。

このSOの質問では、curlを使用してhttpヘッダーを確認する方法について説明します。

于 2012-07-31T10:47:07.497 に答える
0

これを使用して、MIMEタイプを取得します。

echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

一般的な画像のmimeタイプに対して使用します。image / gif、image/pngなど。

于 2012-07-31T10:48:13.177 に答える
0
  1. curl_setoptCURLOPT_HEADERを介して設定することにより、出力にHTTPヘッダーを含めます。
  2. たとえばhttp_parse_headersを使用して、ヘッダーを解析します。
  3. content-typeヘッダーフィールドが画像タイプを示しているかどうかを確認します。

CURLOPT_NOBODYコンテンツタイプのみに関心がある場合は、設定してリクエストメソッドをHEADに設定することもできます。

于 2012-07-31T10:48:56.310 に答える
0
    $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);

そして、許可されたコンテンツタイプを確認します。

于 2012-07-31T10:55:45.230 に答える
-1

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)
于 2012-07-31T10:56:57.500 に答える