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.

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

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路