使用php查找正在上传的文件的扩展名

时间:2009-07-15 20:40:31

标签: php file-upload

我在网站上使用PHP。我必须让用户上传他们的照片。 现在,图片可以是jpeg或png或gif格式。 我的问题是我通过唯一的用户ID识别用户,所以我想将图片保存为: userid.jpg或userid.png等 现在,我如何找到用户使用php选择的文件的扩展名?

10 个答案:

答案 0 :(得分:6)

我不会依赖访问者提供的文件扩展名。相反,问问文件本身是什么(这仍然是欺骗,但它不太可能;你也不必怀疑扩展名是3或4个字符(例如jpeg,jpg))。尝试:

if ($_FILES['avatar']['type'] == "image/gif")
if ($_FILES['avatar']['type'] == "image/jpeg")
if ($_FILES['avatar']['type'] == "image/png")

他们更可靠。

答案 1 :(得分:5)

您可以使用fileinfo(PHP> = 5.3),或者如果您使用的是旧版本的PHP,而不是依赖客户端发送的扩展名,也可以确定文件的类型,像mime_content_type

这样的东西

一旦你拥有了文件的mime类型,只需要映射(比如'image / png'=>'png')

(出于安全原因,实际上应该更好;如果我没记错的话,$ _FILES ['...'] ['type']由客户端发送,可以伪造)

答案 2 :(得分:2)

如果你使用PHP 5.3运行一个很好的更新服务器,你应该查看新的File Information扩展。它将查看文件本身并尝试确定mime类型,从中可以获得扩展名。这比查看浏览器提供的扩展或mime类型更可靠,因为这两者都可以伪造。

理想的解决方案可以结合使用所有这些方法来获得最大效果。

答案 3 :(得分:1)


$filename = "harbl.jpg";
$fileinfo = pathinfo($filename);
echo($fileinfo['extension']);           // prints "jpg"

答案 4 :(得分:1)

假设你有

<input type="file" name="foo">

你可以做到

$info = pathinfo($_FILES['foo']['name']);
$extension = $info['extension'];

答案 5 :(得分:1)

array_pop(explode(".", $_FILES["image"]["name"]))

pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION)

答案 6 :(得分:0)

我在最近构建的应用程序中使用了Array。而且效果很好。

$file_type = array('image/gif'   => 'gif', 
                   'image/jpeg'  => 'jpg',
                   'image/pjpeg' => 'jpg',
                   'image/bmp'   => 'jpg',
                   'image/png'   => 'png');

if(array_key_exists(($_FILES['file_upload']['type']), $file_type){
    Your Function

}

答案 7 :(得分:0)

$extension = end(explode(".",$_FILES['foo']['name']));

答案 8 :(得分:0)

          You can check the image type easily in php.For example, you may have

          <input type="file" name="image">


          $img_name=$_FILES["image"]["name"];                 //name of the image
          $img_tmpname=$_FILES["image"]["tmp_name"];         //temporary name

          $len=strlen($img_name);                           //length of image name
          $dot=strpos($img_name,".");                      //finding position of .
          $type=substr($img_name,$dot,$len);      //finding string from . to end of string.

          Then use if statement and check the file

如果($类型==”。GIF '|| $类型=='。JPG '|| $类型=='。JPEG '|| $类型=='。PNG '|| $类型==' .GIF '|| $类型=='。JPG '|| $类型=='。PNG '|| $类型==' JPEG') {

//你的代码.............  }

答案 9 :(得分:0)

还有一种简单的方法可以帮助我获取用户上传的文件扩展名。
此代码查看是否允许扩展名并更改文件名:
HTML:

<form method='post' enctype='multipart/form-data'>            
  <input type='file' class='f' name='fileToUpload' value='' id='fileToUpload'><br>
  <input type='submit' name='submit' class='button' value='Senden'>
</form>

PHP:

$target_dir = "files/";
$target_filee = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$imageFileType = strtolower(pathinfo($target_filee,PATHINFO_EXTENSION));
$user = $_SESSION['user_id'] # Here you have to put the user id
$target_file = $target_dir . $user . "." . $imageFileType;

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "gif") {
   if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file) {
       echo "The file has been uploaded!";
   }else{
       echo "Ohhh, it didn't work";
   }
}