代码之家  ›  专栏  ›  技术社区  ›  mkamthan

查找使用PHP上载的文件扩展名

  •  1
  • mkamthan  · 技术社区  · 15 年前

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

    9 回复  |  直到 13 年前
        1
  •  6
  •   Gav    15 年前

    我不会依赖访问者提供的文件扩展名。相反,询问文件本身是什么(这仍然可以被欺骗,但可能性较小;而且您不必怀疑扩展名是3或4个字符(例如jpeg、jpg))。尝试:

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

    它们更可靠。

        2
  •  5
  •   Pascal MARTIN    15 年前

    您也可以使用 fileinfo (php>=5.3),或者如果您使用的是旧版本的php,类似于 mime_content_type

    一旦您拥有了文件的mime类型,这只是一个映射问题(如“image/png”=>“png”)。

    (实际上,出于安全原因应该更好;如果我记得正确,客户机会发送$_文件['..'][类型'],并且可以伪造)

        3
  •  2
  •   Mat    13 年前

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

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

        4
  •  1
  •   Matthew Groves    15 年前
    
    $filename = "harbl.jpg";
    $fileinfo = pathinfo($filename);
    echo($fileinfo['extension']);           // prints "jpg"
    
        5
  •  1
  •   Greg    15 年前

    假设你有

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

    你可以做到

    $info = pathinfo($_FILES['foo']['name']);
    $extension = $info['extension'];
    
        6
  •  1
  •   klakegg    15 年前
    array_pop(explode(".", $_FILES["image"]["name"]))
    

    pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION)
    
        7
  •  0
  •   dd .    15 年前

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

    $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
    
    }
    
        8
  •  0
  •   user139198    15 年前
    $extension = end(explode(".",$_FILES['foo']['name']));
    
        9
  •  0
  •   Barath p.    15 年前

              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
    

    如果($type='.gif'$type='.jpg'$type=='.jpeg'$type='.png'$type='.gif'$type='.jpg'$type='.png'$type='.jpeg') {

    //您的代码………… }