9

我正在使用file_get_contents()从远程服务器中提取一些图像,并且我想在进一步处理之前确认结果字符串是否为 JPG/PNG 图像,例如将其保存在本地并创建拇指。

$string = file_get_contents($url);

你会怎么做?

4

4 回答 4

5

您可以使用getimagesize()

$url = 'http://www.geenstijl.nl/archives/images/HassVivaCatFight.jpg';
$file = file_get_contents($url);
$tmpfname = tempnam("/tmp", "FOO");
$handle = fopen($tmpfname, "w");
fwrite($handle, $file);

$size = getimagesize($tmpfname);
if(($size['mime'] == 'image/png') || ($size['mime'] == 'image/jpeg')){
   //do something with the $file
   echo 'yes an jpeg of png';
}
else{
    echo 'Not an jpeg of png ' . $tmpfname .' '. $size['mime']; 
    fclose($handle);
}

我刚刚对其进行了测试,所以它可以工作。您需要制作一个临时文件,因为图像函数适用于本地数据,并且它们只接受本地目录路径,如 'C:\wamp2\www\temp\image.png'

如果不使用fclose($handle);PHP,脚本结束后会自动删除 tmp。

于 2013-03-22T14:14:58.997 回答
5

我从这个答案中得到了 JPG 图像的起始位。所以基本上你可以做的是检查起始位是否相等:

$url = 'http://i.stack.imgur.com/Jh3mC.jpg?s=128&g=1';
$jpg = file_get_contents($url);

if(substr($jpg,0,3) === "\xFF\xD8\xFF"){
    echo "It's a jpg !";
}
于 2013-03-22T14:25:50.290 回答
3

您可以使用

exif_imagetype()

评估您的文件。请检查php手册。

编辑:

请注意必须启用 PHP_EXIF。你可以在这里阅读更多关于它的信息

于 2013-03-22T14:10:46.970 回答
1

也许标准 PHP 函数 exif_imagetype() http://www.php.net/manual/en/function.exif-imagetype.php

于 2013-03-22T14:11:17.163 回答