通过curl检查远程URL是否是图像

时间:2012-07-31 10:42:38

标签: php curl

通过网址卷曲我得到一些信息,我需要检查它是否是图像。

$result = curl_exec($ch);

更新: 内容类型检查不是一个好主意,因为它可能是伪造的。

7 个答案:

答案 0 :(得分:3)

我个人会在PHP中使用gd工具来检查它是否是一个图像。您不能相信源在标头中提供了正确的MIME。我不止一次信任标题,并因内容是图像但被转移(由于网址/服务器的工作方式)而不是另一种格式而感到失望。

答案 1 :(得分: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;
}

上面的函数会返回你的类型然后你可以检查返回值中的子串image

答案 2 :(得分:0)

我想一种方法是读取HTTP标头,尤其是Content-type标头,并评估它是否是图像。

This SO question讨论如何使用curl检查http标头。

答案 3 :(得分:0)

使用它来获取MIME类型。

echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

并将其用于常见的图像mime类型即。 image / gif,image / png等。

答案 4 :(得分:0)

  1. 通过curl_setopt设置CURLOPT_HEADER,在输出中包含HTTP标头。
  2. 解析标题,例如使用http_parse_headers
  3. 检查内容类型标题字段是否表示图像类型。
  4. 如果您只对内容类型感兴趣,也可以通过设置CURLOPT_NOBODY将请求方法设置为HEAD。

答案 5 :(得分: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);

并检查允许的内容类型。

答案 6 :(得分:-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)