dongzu3511 2016-04-30 17:21
浏览 12
已采纳

坚持在PHP上传不同扩展的图像

I have trouble uploading .png and .bmp extensions while other extensions work fine

$allowed_types = array(".gif" , ".jpg" , ".jpeg", ".png" , ".bmp");
$fname = $_FILES["file"]["name"];
$f_ext = substr($fname, strripos($fname, '.'));
$f_size = $_FILES["file"]["size"];

if (in_array($f_ext,$allowed_types) && ($f_size < 50000))
    {   
        // upload
    } else { 
        //error

I just can't figure out what I'm doing wrong here. Jpg works, gif works, jpeg works, but png and bmp won't.

  • 写回答

1条回答 默认 最新

  • douye9175 2016-04-30 17:59
    关注

    Try this. My first response was a bit hasty. I always exclude the dot in my extension checks.

    $allowed_types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/jpg', 'image/png', 'image/x-png', 'image/bmp', 'image/x-windows-bmp'); 
    $allowed_exts = array('gif', 'jpeg', 'jpg', 'png', 'bmp'); 
    
    $img_info = @getimagesize($_FILES['file']['tmp_name']); 
    $f_type = image_type_to_mime_type($img_info[2]); // file type
    $f_ext = strtolower(substr(strrchr($_FILES['file']['name'], '.'), 1)); // file extension
    $f_size = $_FILES["file"]["size"];
    $fname = $_FILES["file"]["name"];
    
    IF ( (in_array($f_ext, $allowed_exts)) && (in_array($f_type, $allowed_types)) && ($f_size <= 50000) ) {  
        // upload
    
    } else { 
        //error
        die('<pre>Error!<br>Size: '.$f_size.'<br>Extension: '.$f_ext.'<br>Mime: '.$f_type.'</pre>');
    }
    

    Also, MAX_FILE_SIZE must precede the file input field. Php should be configured to allow the filesize as well.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号