Magic-Number检查一个好主意是验证文件还是另一种方式更好。
这是我的功能想法,检查$_FILES['tmp_name']
的Magic-Number,但此时文件加载到服务器上的临时文件夹。我不能在它流到服务器的同时检查它,所以在完全加载之前我不能将加载中止到temp。
// check file type with the first bit of magic numbers
function is_magic_number_ok($file)
{
switch ($this->extension) {
case '.ai':
$magic_option = array(
'magic_number_hex' => '25504446',
'magic_number_bit_length' => 4,
);
break;
case '.bmp':
$magic_option = array(
'magic_number_hex' => '424D',
'magic_number_bit_length' => 2,
);
break;
case '.class':
$magic_option = array(
'magic_number_hex' => 'CAFEBABE',
'magic_number_bit_length' => 4,
);
break;
case '.jpg':
$magic_option = array(
'magic_number_hex' => 'FFD8',
'magic_number_bit_length' => 2,
);
break;
case '.jp2':
$magic_option = array(
'magic_number_hex' => '0000000C6A5020200D0A',
'magic_number_bit_length' => 10,
);
break;
case '.gif':
$magic_option = array(
'magic_number_hex' => '47494638',
'magic_number_bit_length' => 4,
);
break;
case '.tif':
$magic_option = array(
'magic_number_hex' => '4949',
'magic_number_bit_length' => 2,
);
break;
case '.png':
$magic_option = array(
'magic_number_hex' => '89504E47',
'magic_number_bit_length' => 4,
);
break;
default:
return false;
}
// get the bit limited file length and convert to HEX
$file_bin_stream = file_get_contents($file, NULL, NULL, 0, $magic_option['magic_number_bit_length']);
$file_hex = strtoupper(bin2hex($file_bin_stream));
if ($magic_option['magic_number_hex'] == $file_hex) {
echo 'true';
return true;
} else {
echo 'false';
return false;
}
}
答案 0 :(得分:0)
最后,php有一个内置的文件信息扩展,可以为你完成大部分工作。更多信息:http://php.net/fileinfo