Neden durum işe yaramazsa aşağıdaki upload?

4 Cevap

Yani bir yükleme komut dosyası var ve ben tarih ediliyor dosya türünü kontrol etmek istiyorum. Ben sadece pdf, doc, docx ve metin dosyaları istiyorum

Yani var:

$goodExtensions = array('.doc','.docx','.txt','.pdf', '.PDF');
$name = $_FILES['uploadFile']['name'];
$extension = substr($name, strpos($name,'.'), strlen($name)-1);


 if(!in_array($extension,$goodExtensions) || (($_FILES['uploadFile']['type'] != "applicatioin/msword") || ($_FILES['uploadFile']['type'] != "application/pdf"))){
     $error['uploadFile'] = "File not allowed. Only .doc, .docx, .txt and pdf";
 }

Test ve doğru belgeler de dahil niçin hata alıyorum?

4 Cevap

Kullandığınız OR yerine AND sizin ifadesinde olduğundan:

 if (!in_array($extension,$goodExtensions)
     || (($_FILES['uploadFile']['type'] != "applicatioin/msword")
         || ($_FILES['uploadFile']['type'] != "application/pdf"))) {
     $error['uploadFile'] = "File not allowed. Only .doc, .docx, .txt and pdf";
 }

bu her zaman doğru olarak değerlendirilir: dosya uzantısı dizi goodExtensions listelenen eğer, ilk ifadesi yanlıştır. Ancak, dosya türü both Kelime olamaz ve aynı zamanda PDF, ikinci parantez ifade daima doğru olduğu.

O either dosya uzantısını or MIME türü iyi olduğundan emin olmak istiyorsanız, doğru ifadesi ("applicatioin / msword" in yazım hatası için düzeltme dahil) olacaktır:

 if (!in_array($extension,$goodExtensions)
     || (($_FILES['uploadFile']['type'] != "application/msword")
         && ($_FILES['uploadFile']['type'] != "application/pdf"))) {
     $error['uploadFile'] = "File not allowed. Only .doc, .docx, .txt and pdf";
 }

Için üçüncü parametre substr uzunluğu değil, son konumdur. Eğer dizenin sonuna kadar her şeyi istiyorsanız, sadece tamamen üçüncü parametresini atlarsanız:

$extension = substr($name, strpos($name,'.'));

Ayrıca applicatioin/msword in application yanlış yazıldığından ettik.

Son olarak, durumda dosya adı uzantısını ayıran önce diğer nokta içeriyor, strrpos yerine strpos içinde kullanmak isteyebilirsiniz.

Edit: Eğer açıklamada mantık da yanlıştır. Uzatma bilinen değil, ya da tip MS Word değil, ya da tip PDF değildir ya, eğer sen hatasız. Tipi aynı anda her ikisi de bu olamaz, bu yüzden her zaman başarısız olacak. İstediğiniz son || olmak için &&, sanırım.

Muhtemelen, çünkü if bildirimi döner bu 3 koşullardan bir (veya daha fazla) true.

Test ve doğru belgeler de dahil niçin hata alıyorum?

Bilmiyorum, ama sen büyük bulmak için ayrı tekil bloklar halinde "eğer" hata almak için yapardı.

MIME türü ve dosya uzantısı test çıktılarını olun.

echo "Extension = ".$extension."<br>";
echo "MIME Type = ".$_FILES['uploadFile']['type']; 

Ayrıca, göz atlar tek şey applicatioin/msword bir yazım hatası olduğunu.