通过来自 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;
}
上面的函数将返回类型,然后你可以检查image返回值中的子字符串
我想一种方法是读取 HTTP 标头,尤其是Content-type标头,并评估它是否是图像。
这个 SO question讨论了如何使用 curl 检查 http 标头。
使用它来获取 MIME 类型。
echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
并将其用于常见的图像 mime 类型,即。图片/gif、图片/png等
CURLOPT_HEADER通过curl_setopt设置在输出中包含 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)