上传验证,允许其他扩展?

时间:2012-10-28 11:38:00

标签: php

目前我已允许上传.jpg文件。

如何添加jpeg,gif和png?

我目前的代码如下......

$filename = basename($_FILES['photo']['name']);
            $ext = substr($filename, strrpos($filename, '.') + 1);

            //Check if the file is JPEG image and it's size is less than 5Mb
$allowedExts = array('jpg', 'jpeg', 'gif', 'png');
            if ( (in_array($ext, $allowedExts)) && ($_FILES["photo"]["type"] == "image/jpeg") && ($_FILES["photo"]["size"] <= 5242880) ){
                //Determine the path to which we want to save this file
                $newname = str_replace( ' ', '_', trim( strip_tags( $_POST['name'] ) ) ) . _ . $formKey->generateKey() . '_' . time() . '.jpg';

2 个答案:

答案 0 :(得分:1)

制作一系列允许的扩展程序,然后检查它。看看http://php.net/manual/en/function.in-array.php

你的结局如下:

$allowedExts = array('jpg', 'jpeg', 'gif'); // Add more here
if (in_array($ext, $allowedExts))
{
    // Do something here
}

另外,为了检查文件的扩展名,我建议你使用pathinfo:http://php.net/manual/en/function.pathinfo.php 有些人可以通过上传以.jpg结尾的文件来欺骗你,但这可能是.php文件。

[编辑]更新,因为我讨厌迷你评论:

   $allowedExtensions = array("image/jpeg", "image/png", "image/gif", "image/pjpeg", "image/jpg");
   $pathInfo = pathinfo($_FILES["photo"]["type"]);
   if (in_array($pathInfo['extension'], $allowedExtensions))
   {
       // Do stuff
   }

Waaaay这种方式更简单。这甚至可以通过使用pathinfo的第二个参数来简化,但我假设您之后需要数组的其他元素。

答案 1 :(得分:0)

您可以使用以下内容:

if(file_exists($path_image) && in_array(exif_imagetype($path_image),array(1, 2, 3, 6))){ ... } 

http://php.net/manual/en/function.exif-imagetype.php