我使用了下面的功能,但它允许上传pdf 并且它不检查它是否是一个图像
function image_allowed($file_extn) {
$allowed = array('jpg','jpeg','gif','png');
$file_name = $_FILES['image']['image_name'];
$file_extn = strtolower(end(explode('.', $file_name)));
$file_temp = $_FILES['image']['tmp_name'];
if (in_array($allowed,$file_extn )=== true){
return true;
}else {
return false;
}
并使用下面的代码进行检查,我不知道是不是错了
if (image_allowed($_POST['image'])=== true) {
$errors[] = ' images only are allowed.';
并且我很想知道我可能在这里忽略的任何检查
答案 0 :(得分:2)
虽然比较扩展可能会起到作用,但它不是很安全,因为很容易伪造扩展。我建议检查文件的mime类型。
选项1 - 使用finfo
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$file_type = finfo_file($finfo, "image.gif");
finfo_close($finfo);
此案例的输出:image/gif
请记住相应地更改$allowed
数组。
您可以在wikipedia找到图像的可能mime类型列表。
选项2 - 使用exif-imagetype
exif_imagetype('image.gif')
请注意,在这种情况下,您的$allowed
数组应包含表示可能返回值的常量。 (有关详细信息,请参阅手册 - 上面的链接)
答案 1 :(得分:0)
您可以使用pathinfo(http://php.net/manual/en/function.pathinfo.php)检查图像类型:
$path_parts = pathinfo('/your/image/path/');
echo $path_parts['extension']; // Your extension...
在您的功能代码中:
function image_allowed($imagePath) {
$allowed = array('jpg','jpeg','gif','png');
$myExtension = pathinfo($imagePath);
if(in_array($myExtension['extension'], $allowed)
return true;
else
return false;
}
答案 2 :(得分:0)
你需要像这样使用:
function image_allowed() {
$allowed = array('jpg','jpeg','gif','png');
$file_name = $_FILES['image']['name'];
$file_extn = strtolower(end(explode('.', $file_name)));
$file_temp = $_FILES['image']['tmp_name'];
if (in_array($file_extn,$allowed)=== true){
return true;
}
return false;
}
if (image_allowed()=== false) {
$errors[] = ' images only are allowed.';
}else{
//save image or something else
}