国产又猛又爽又黄视频|在线观看人成视频免费|少妇高潮太爽了在线视频|911国产免费无码专区|特黄做受又大又粗又长大片|欧美一级二级免费在线观看|日日夜人人澡人人澡人人看免|欧洲午夜精品一级毛片在线播放

Discuz因圖片分辨率過高造成提示“沒有合法的文件被上傳”的解決方案

2015-12-29 14:36 欄目:技術(shù)開發(fā) 查看(10936)

用相機(jī)拍的照片的分辨率是特別高的,分辨率達(dá)到3000*5000px以上級(jí)別,這么高的圖片的品質(zhì)肯定是杠杠的,但在網(wǎng)頁上面來講確實(shí)太大了,因?yàn)槲覀兤胀ǖ木W(wǎng)頁也用不著展示這么高清這么大的圖片。我覺得原因有二:一是因?yàn)槲覀兤胀ǖ木W(wǎng)頁確實(shí)不需要這么大的;二是這么大的圖片通常有好幾兆甚至十幾兆大小,這樣頁面的加載速度回很慢的。

我們?cè)贒iscuz中遇到一個(gè)問題,那就是上傳某些圖片的時(shí)候提示“沒有合法的文件被上傳”,而不是說您上傳的文件太大了。想到不合法通常會(huì)想到的是圖片的格式不對(duì),不是普通的jpg或者png之類的,而是其他的非主流的圖片格式。但不管把這樣的圖片轉(zhuǎn)變成png還是jpg都不能上傳,但吧圖片一縮小卻是可以上傳的。這樣不就是因?yàn)槲募笮〉膯栴}么?(越大一般來講文件體積也越大)。但檢查后發(fā)現(xiàn)文件體積并沒有超過網(wǎng)站限制以及對(duì)應(yīng)服務(wù)器的php配置。

sd

但當(dāng)我創(chuàng)建了一個(gè)5000*4000px空白圖片的時(shí)候卻不能上傳,而它的體積才645KB,遠(yuǎn)遠(yuǎn)低于限制的文件大小。于是開始分析源代碼了,結(jié)果分析到class文件中發(fā)現(xiàn)了一個(gè)discuz_upload類,就是實(shí)現(xiàn)該上傳功能。而在其中的get_image_info方法中我們似乎就發(fā)現(xiàn)了問題,代碼如下:

function get_image_info($target, $allowswf = false) {
    $ext = discuz_upload::fileext($target);
    $isimage = discuz_upload::is_image_ext($ext);
    if(!$isimage && ($ext != 'swf' || !$allowswf)) {
        return false;
    } elseif(!is_readable($target)) {
        return false;
    } elseif($imageinfo = @getimagesize($target)) {
        list($width, $height, $type) = !empty($imageinfo) ? $imageinfo : array('', '', '');
        $size = $width * $height;
        if($size > 16777216 || $size < 16 ) {
            return false;
        } elseif($ext == 'swf' && $type != 4 && $type != 13) {
            return false;
        } elseif($isimage && !in_array($type, array(1,2,3,6,13))) {
            return false;
        } elseif(!$allowswf && ($ext == 'swf' || $type == 4 || $type == 13)) {
            return false;
        }
        return $imageinfo;
    } else {
        return false;
    }
}

這個(gè)方法就是獲取圖片的信息,而返回的值就是真或者假,而為假的時(shí)候就提示非法,為真的時(shí)候驗(yàn)證通過,上傳流程正常執(zhí)行。而其中就有一個(gè)$size變量,它的值是通過獲取圖片的長(zhǎng)寬,然后長(zhǎng)寬乘積得到,默認(rèn)是16777216,開根之后是4096,也就是超過4096*4096px的圖片就會(huì)之前的報(bào)錯(cuò)。而開始的時(shí)候我們上傳的是5000*4000=2000000,這個(gè)值是大于設(shè)定的臨界的,于是就返回flase。

與我們的項(xiàng)目經(jīng)理聯(lián)系
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請(qǐng)注明出處:Discuz因圖片分辨率過高造成提示“沒有合法的文件被上傳”的解決方案 - 微構(gòu)網(wǎng)絡(luò)
分享: