如何制作验证和成像的功能

时间:2015-04-24 09:29:40

标签: php

我使用了下面的功能,但它允许上传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.';

并且我很想知道我可能在这里忽略的任何检查

3 个答案:

答案 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
}