Überprüfen Sie, ob die Dateierweiterung oder der MIME-Typ fehlschlägt

Ich muss überprüfen, ob eine hochgeladene Datei .csv oder .txt als Erweiterung hat und ich mache es wie folgt:

 $uploadfiles = $_FILES['uploadfiles']; echo '
'; var_dump($uploadfiles); echo '

'; if (is_array($uploadfiles)) { foreach ($uploadfiles['name'] as $key => $value) { if ($uploadfiles['error'][$key] == 0) { $filetmp = $uploadfiles['tmp_name'][$key]; $filename = $uploadfiles['name'][$key]; $filetype = wp_check_filetype(basename($filename), null); $filetitle = preg_replace('/\.[^.]+$/', '', basename($filename)); $filename = $filetitle . '.' . $filetype['ext']; $upload_dir = wp_upload_dir(); if ($uploadfiles['type'] != "text/csv" || $uploadfiles['type'] != "text/plain") { echo "Error, the file $filename has not a valid extension: " . $filetype["ext"]; continue; } echo "entre";die(); $i = 0; while (file_exists($upload_dir['path'] . '/' . $filename)) { $filename = $filetitle . '_' . $i . '.' . $filetype['ext']; $i++; } $filedest = $upload_dir['path'] . '/' . $filename; if (!is_writeable($upload_dir['path'])) { $this->msg_e('Unable to write to directory %s. Is this directory writable by the server?'); return; } if (!move_uploaded_file($filetmp, $filedest)) { $this->msg_e("Error, the file $filetmp could not moved to : $filedest "); continue; } } } }

Aber ich bekomme diesen Fehler die ganze Zeit:

Fehler, die Datei Aruba Airlines Tickets-Coupons (bis 27-Apr-2014) – Aruba Airlines Tickets-Coupons .csv hat keine gültige Erweiterung: csv

Ich teste auch mit diesem Code:

 if ($filetype['type'] != "text/csv" || $filetype['type'] != "text/plain") { echo "Error, the file $filename has not a valid extension: " . $filetype["ext"]; continue; } 

Und das Ergebnis ist das Gleiche. Wenn ich das mache:

 echo '
'; var_dump($uploadfiles); echo '

';

Ich bekomme das als Ergebnis:

 array (size=5) 'name' => array (size=1) 0 => string 'Aruba Airlines tickets-coupons (through 27-Apr-2014) - Aruba Airlines tickets-coupons .csv' (length=90) 'type' => array (size=1) 0 => string 'text/csv' (length=8) 'tmp_name' => array (size=1) 0 => string '/tmp/php53tzhZ' (length=14) 'error' => array (size=1) 0 => int 0 'size' => array (size=1) 0 => int 14084526 

Wo ist der Fehler?

Nach verglichenen Werttypen suchen

Also folge ich dem Vorschlag eines Mitglieds hier:

 echo '
'; print_r($uploadfiles); echo '

'; // this is the only key since I'm uploading // just one file for that I check in [0] echo gettype($uploadfiles['type'][0]); // output: string

Dann:

 echo gettype($filetype['type']); // output: string 

Dann:

 if ($filetype['type'] != $fileCSV || $filetype['type'] != $fileText) { echo "Error, the file $filename has not a valid extension: " . $filetype["ext"]; continue; } 

Immer noch den gleichen Fehler, das macht mich verrückt!

Solutions Collecting From Web of "Überprüfen Sie, ob die Dateierweiterung oder der MIME-Typ fehlschlägt"

Gefunden, wo ich den Fehler gemacht habe, unter der Bedingung, mein Code war:

 if ($filetype['type'] != $fileCSV || $filetype['type'] != $fileText) { echo "Error, the file $filename has not a valid extension: " . $filetype["ext"]; continue; } 

Und das Richtige ist dieses:

 if (!in_array($filetype['type'], array($fileCSV, $fileText))) { echo "Error, the file $filename has not a valid mimetype: " . $filetype["type"]; continue; } 

Dies ist nur eine Idee und nicht etwas, das garantiert funktioniert, aber ich habe in meiner Erfahrung in der Vergangenheit auf Probleme mit Strings zwischen der Definition als “String” vs “String” hingewiesen.

Ich merke in der Array-Ausgabe, es zeigt es als “Text / CSV”, wo Sie es haben “Text / CSV”. Auch dies ist vielleicht nicht das Problem, aber es ist einen Versuch wert.

Wenn ich deinen Code durchlese, scheint mir alles logisch zu sein.

Sie könnten sogar Dateitypen auf Variablen setzen, so dass Sie diese nicht immer wieder eingeben müssen, da die meisten Code-Editoren Variablen vorschlagen / automatisch füllen. Sie wissen nie, wann Sie mehr Typen unterstützen oder neue Referenzen erstellen.

Versuchen Sie, es auf etwa so einzustellen: $ fileCSV = ‘text / csv’; $ fileText = ‘text / plain’; Dann ersetzen Sie das in Ihrer bedingten statement.

 if ($filetype['type'] != $fileCSV || $filetype['type'] != $fileText) { 

Warum benutzen Sie nicht die eingebaute WordPress-functionalität dafür?

Überprüfen Sie den Dateityp

Rufen Sie den Dateityp vom Dateinamen ab.

Sie können optional das MIME-Array bei Bedarf definieren.

 < ?php wp_check_filetype( $filename, $mimes ) ?> 

Überprüfen Sie den Dateityp und die Erweiterung

Versucht den tatsächlichen Dateityp einer Datei zu ermitteln.

Wenn dies nicht möglich ist, wird die Dateinamenerweiterung zur Bestimmung des Typs verwendet. Wenn festgestellt wird, dass die Erweiterung nicht mit dem tatsächlichen Typ der Datei übereinstimmt, wird der Wert “Eigenschaftsname” mit einem korrekten Dateinamen und einer Erweiterung angegeben.

  < ?php $validate = wp_check_filetype_and_ext( $file, $filename, $mimes ); if( $validate['proper_filename'] !== false ) $filename = $validate['proper_filename']; ?> 

Referenz:

http://codex.wordpress.org/Function_Reference/wp_check_filetype

http://codex.wordpress.org/Function_Reference/wp_check_filetype_and_ext