2017-09-10 1 views
2
$config['upload_path'] = './uploads/'; 
$config['allowed_types'] = 'txt'; 
$config['max_size'] = '10000'; 
$this->load->library('upload', $config); 
if(!$this->upload->do_upload('datafile')){ 
    print_r($this->upload->display_errors()); 
}else{ 
     // rest of work 
} 

alles in Ordnung ist, aber wenn es versucht, eine Textdatei laden char enthält neue Zeile beginnt (Beispiel: [email protected]), zeigt es diesen Fehler: The filetype you are attempting to upload is not allowed.Der Dateityp Sie versuchen zu laden ist nicht in codeigniter erlaubt

Gibt es einen Konflikt mit einem xss Filter? Vielleicht nicht, weil ich mit remove xss Filterfunktion von system/libraries/Upload.php

Aber var_dump($_FILES); versucht haben, zeigt, dass es richtig mime Dateityp ist.

Codeigniter Version 3.0.3

Zusatz:

wenn es globale Dateitypeinstellung wird:

$config['allowed_types'] = '*'; 

Es funktioniert. Aber das ist nicht die Lösung. Verstößt es irgendwie mit mime Art Filterung?

+0

Was für '[email protected] als _correct Datei type_ gezeigt wird '? – Tpojka

+0

Dargestellt 'text/plain' –

+0

Ist das der genaue Name der Textdatei? – Tpojka

Antwort

0

Wie bereits in GitHub issues beschrieben, können Sie dies lösen. Nach zwei Themen, die damit verbunden sein könnten (GitHub, PHP), war ich nicht in der Lage, die wahre Natur dieses Verhaltens zu verstehen. Obwohl ich auf zwei mögliche Lösungen kam:

1.) MIME-Typ für txt-Erweiterung in APPPATH . 'config/mimes.php'

'txt' =>  ['text/plain', 'text/x-c'], 

2.) erweitern vanilla PHP upload code verwenden, die mich Standard mimes.php eine solche Datei hochladen können, ohne aktualisieren Datei.

+1

Sie könnten meine letzte Zeile vermisst werden: 'Es funktioniert. Aber das ist nicht die Lösung. Stört es irgendwie mit Mime-Typ-Filterung? ' Ich möchte den Grund dafür wissen. Ich las narfbg's Kommentar dort. Das ist nicht so einfach, denke ich. Ich werde einige Tests früher aktualisieren –

0

Grund für das Problem:

narfbg erfaßt, um die MIME-Typ-Rückkehr für die Datei char beginnend neue Zeile enthält, ist anders als normale Textdatei mimt-Typ.

char ist ein C-Variablentyp. Also, beim Hochladen der Datei, Server-Rückgabe ist es eine text/x-c MIME-Typ-Datei. Es steht auch in Konflikt mit float und double. Dies sind auch C-Variablentypen.

Lösung:

Ich habe gefunden, zwei Lösungen:

1) Datei hochladen ohne Mime-Erkennung:

$config['allowed_types'] = '*'; 

Dann Dateierweiterung prüfen.Wenn es .txt Datei, dann Prozess:

$file_extension = $uploadData['file_ext']; 
if($file_extension == ".txt"){ 
    //process 
} 

2) hinzufügen 'text/x-c' Mime-Typ in application/config/mimes.php' für .txt Erweiterung:

'txt' => array('text/plain', 'text/x-c') 
Verwandte Themen