之前有做上傳圖片的功能.
https://dotblogs.com.tw/grayyin/2016/12/29/191104
若使用者上傳非圖片的檔案,
或者將 病毒.exe 上傳呢?
這邊紀錄一些檢查檔案的做法.
1. 使用PHP 提供的function getimagesize.
<?php
function isImage($filename)
{
$types = '.gif|.jpeg|.png|.bmp'; //gif|jepg|png|bmp 四種
if(file_exists($filename))
{
if (($info = getimagesize($filename))
return 0;
$ext = image_type_to_extension($info['2']);
return stripos($types,$ext);
}
else
{
return false;
}
}
if(isImage('isimg.txt')!==false)
{
echo isImage('image1.jpg');
echo 'It is image.';
}
else
{
echo 'It's not image.';
}
?>
2. 檢查圖檔前兩個字元
<?php
function isImage($fileName)
{
$file = fopen($fileName, "rb");
$bin = fread($file, 2); // 只讀取兩個字元
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/)
{
return $typeCode;
}
else
{
return false;
}
}
if (isImage("image.jpg"))
{
echo 'It is image.';
}
else
{
echo 'It is not image.';
}
?>
3. 使用PHP 提供的function exif_imagetype檢查檔案類型
png, jepg, bmp等等, 一共有17種格式檢查.
<?php
function isImage($filename){
$mimetype = exif_imagetype($filename);
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP)
{
return true;
}else{
return false;
}
}
if(isImage('image.png'))
{
echo 'It is image.';
}
else
{
echo 'It is not image.';
}
?>