是否可以从远程路径告诉图像类型?

时间:2015-04-16 08:43:29

标签: php image mime-types

我正在研究什么是有效的水印系统,用户的URL就是这样的。

https://api.example.com/overlay?image_path=http://www.theuserssite.com/image.ext&other=parameters

我想知道用户image_path是否类似于www.theuserssite.com/image?image_id=123,网址中没有扩展名,所以我无法分辨图像的文件类型。

无论如何,我可以从远程路径获取文件类型的内容吗?

3 个答案:

答案 0 :(得分:2)

不,不是没有调用和加载图像来检查它的类型。尝试使用getimagesize PHP函数。

示例:

//https://api.example.com/overlay?image_path=http://www.theuserssite.com/image.ext
    $var = "http://www.theuserssite.com/image.ext";
    $output = getimagesize($var);

    $output[2] = image MIME type.

答案 1 :(得分:1)

马丁是对的。 PHP必须先下载图像才能验证图像类型。 您可以通过请求http请求的标头尝试一下。 但是这些可能很容易被另一方错误/欺骗。

答案 2 :(得分:0)

您可以尝试使用cURL(如果您的系统上存在) - 发出请求并解析响应:

$ch = curl_init('www.theuserssite.com/image?image_id=123');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
$results = split("\n", trim($result));

foreach ($results as $row)
{
        if (strtok($row, ':') == 'Content-Type')
        {
            $exploded = explode(":", $row);
            echo trim($exploded[1]);
        }
}

如上所述here

  

HTTP服务器以状态行(指示事情进展顺利),响应标头以及最常见的响应主体进行响应。

因此,无需存储实际文件只需解释结果。