Hatta PHP ile IE 'böcek' var

2 Cevap php

This is not a real bug BUT for sure it is not what you would expect. I have this sample code to upload images:

if($type=="image/jpg" || $type=="image/jpeg" || $type=="image/pjpeg" || $type=="image/tiff" || $type=="image/gif" || $type=="image/png") {
   // make upload
else echo "Incorrect format ...."; 

Sorun bir görüntünün uzantısı değiştirirseniz, en. Jpgq hatta. Jpg% kadar diyelim ve bunu yüklemek için deneyin olduğunu, FF ve Chrome dosyanın application / octet-stream "" un tipi "ve diyecekler normal koşul yanlış olacaktır.

IE, diğer taraftan, dosya türü, "image / jpeg" olduğu koşul true olacak ve dosya tarih olacak diyecekler. Tabii ki, daha sonra görüntüyü okumaya çalışıyorum herhangi bir tarayıcı bunu yapmak mümkün olmayacaktır.

Msdn.microsoft.com üzerinde o söylüyor, çünkü bu bir hata değil: önerilen "Eğer" ve "" (sunucu tarafından sağlanan) MIME tipi (bilinen değil ve belirsiz değil) bilinmeyen, FindMimeFromData hemen bu MIME türünü döndürür "Eğer sunucu sağlanan MIME tipi tampon doğrulamak ya da gerçek içeriği bir MIME türünü elde etmek için bir girişim taranır, bilinen ya da belirsiz ya değildir. "

Benim sorular şunlardır:

  1. Neden / sunucu upload gerçek MIME türünü IE bilen yok AMA sunucudan okumak için başarısız olur?
  2. Nasıl I (dosya doğru uzantısı yoksa, koşul yanlış olmak zorunda) Bu soruna geçici bir çözüm bulabilirsiniz? Bu uzatma biçimi (ve MIME türü değil) kontrol etmek akıllıca mı?
  3. kullanımı tavsiye edilmez, yukarıdaki uzantıları herhangi biridir? Ben diğerlerini eklemek gerekir?

2 Cevap

Performans için mimetype bulunuyor için webserver genellikle dosyayı inceleyin değil nedenlerle, genellikle sadece uzantısını kullanır.

Bu nedenle upload size mimetype okuyun ve ardından dosyayı doğrudan hizmet etmek websunucu isterseniz mime türünde için uygun bir uzantıya sahip dosyayı kaydetmek gerekir. Alternatif dosyadan mimetype okur ve istemci üzerine geçirmeden bir indirme sarıcı kullanmaktır.

Temel örnek,

/* verify and sanitize any file extension from mimetype
 */
    switch($subtype) {
    case 'pjpeg':
    case 'jpeg':
        if (!preg_match('/\.jp(e)?g$/i', $real_name)) {
            $real_name .= '.jpg';
        }
        break;

    default:
        if (!preg_match('/\.'.$subtype.'$/i', $real_name)) {
            $real_name .= ".$subtype";
        }
        break;
    }