2017-02-15 5 views
0

Ich habe ein wirklich seltsames Problem. Ich verwende die CodeIgniter-Upload-Klasse, um den Upload eines einfachen JPG-Bildes zu verwalten. Wenn ich eine Datei mit der Erweiterung .JPG hochlade, wird meine Datei mit der Erweiterung .JPG hochgeladen, selbst wenn ich die Eigenschaft file_ext_tolower auf TRUE setze. Was ich nicht will! Hier ist ein Code ..CodeIgniter Upload Klasse file_ext_tolower funktioniert nicht, auch auf localhost

$this->load->library('upload'); 

$config['upload_path'] = './resources/img/content'; 
$config['allowed_types'] = 'jpg'; 
$config['overwrite'] = FALSE; 
$config['file_ext_tolower'] = TRUE; 
$config['remove_spaces'] = TRUE; 

$this->upload->initialize($config, true); 

if (! $this->upload->do_upload('cover')) { 
    $this->session->set_flashdata('message','Cover: ' . $this->upload->display_errors()); 
    redirect('admin'); 
    break; 
} else { 
    // Whatever 
} 

Problem ist, das läuft nicht einmal auf localhost. Es geht immer weiter und lädt die Datei mit dem .JPG hoch. Ich kann es einfach nicht verstehen. Ich verwende CodeIgniter 3.1.0 auf dem Server und dem localhost. Irgendwelche Gedanken? Auf dem Server habe ich auch die Fileinfo-Erweiterung in der php.ini aktiviert.

Eine andere Sache, die dies bringt, ist, dass .. wenn ich eine Datei mit dem Namen myfile.JPG und myfile.jpg, CodeIgniter ist nicht in der Lage zu sehen, dass sie die gleiche Datei sind .. was letztlich ist wahrscheinlich es tut, wenn nur file_ext_tolower richtig funktioniert.

Auf dem Server wird myfile.JPG als myfile.JPG gespeichert. Ich denke, wenn file_ext_tolower auf TRUE gesetzt wird, sollte es als myfile.jpg gespeichert werden ... und schließlich, bevor das getan wird, tatsächlich nach einer anderen Datei mit diesem Namen suchen..wenn Datei mit diesem Namen bereits auf dem Server ist, es sollte der überschreiben Einstellung folgen: entweder überschreiben oder umbenennen mit einer fortlaufenden Nummer.

Antwort

0

Ich habe Lösung für Sie :)

Datei erstellen: application/Bibliotheken/MY_Upload.php

<?php 
class MY_Upload extends CI_Upload 
{ 
    /** 
    * Force filename to lowercase 
    * 
    * @var string 
    */ 
    public $file_name_tolower = FALSE; 


    function _prep_filename($filename) 
    { 
     if ($this->mod_mime_fix === FALSE OR $this->allowed_types === '*' OR ($ext_pos = strrpos($filename, '.')) === FALSE) 
     { 
      return $filename; 
     } 

     $ext = substr($filename, $ext_pos); 
     $filename = substr($filename, 0, $ext_pos); 

     //change ext tolower 
     $filename = ($this->file_name_tolower)?strtolower($filename):$filename; 
     //change ext tolower 
     $ext = ($this->file_ext_tolower)?strtolower($ext):$ext; 

     return str_replace('.', '_', $filename).$ext; 
    } 
} 

I modyfication file_ext_tolower und file_name_tolower

Beispiel für Datei hinzufügen : COVE.JPG

... 
$config['file_ext_tolower'] = TRUE; 
$config['file_name_tolower'] = TRUE; 
... 

Ergebnis: cover.jpg

... 
$config['file_ext_tolower'] = TRUE; 
$config['file_name_tolower'] = FALSE; 
... 

Ergebnis: cover.jpg

... 
$config['file_ext_tolower'] = FALSE; 
$config['file_name_tolower'] = TRUE; 
... 

Ergebnis: cover.jpg

... 
$config['file_ext_tolower'] = FALSE; 
$config['file_name_tolower'] = FALSE; 
... 

Ergebnis: cOVEr.JPG

+0

Wird bei dieser Lösung geprüft, ob bereits eine Datei mit dem angegebenen neuen Namen auf dem Server vorhanden ist? Ursache Ich sehe den Code, aber ich sehe keine Zeile, die dies überprüfen sollte. Es ist wichtig, dass es nach einer Datei mit demselben Namen sucht und diese NICHT überschreibt. – user1447316

+0

Auch..ich sehe wieder file_ext_tolower. Aber in der Frage, die ich sagte, funktioniert es nicht. Wenn es richtig funktioniert, würde ich diese ganze Problemumgehung nicht brauchen. Das ist der Punkt .. – user1447316

+0

versuchen Sie diesen Code :) –

Verwandte Themen