Wie lässt sich die CodeIgniter-Datei-Upload-Klasse dazu bringen, alle Erweiterungen zu akzeptieren?

Lesezeit: 2 Minuten

Benutzer-Avatar
Ali

Wenn ich derzeit keine Erweiterungen für die Klasse bereitstelle, sind keine Erweiterungen zulässig. Ich möchte alle Erweiterungen zulassen. Gibt es eine Möglichkeit, dies zu tun, ohne den Kern zu hacken?

In Codeigniter 2 müssen Sie einfach erlaubte Typen wie folgt definieren:

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

  • Funktioniert auch in CodeIgniter 3

    – moveax

    25. Januar 2018 um 11:56 Uhr

Was ich mache ist:

$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;

Das macht alle Dateien in jedem Funktionsaufruf automatisch erlaubt.

Benutzer-Avatar
Alan Sturm

Die Antwort auf Ihre direkte Frage: Nein, es gibt keine Möglichkeit, dies zu tun, ohne den Kern zu überschreiben

Die gute Nachricht ist, dass Sie es vermeiden können, den Kern zu hacken, laut Handbuch

Als zusätzlichen Bonus erlaubt CodeIgniter Ihren Bibliotheken, native Klassen zu erweitern, wenn Sie einfach nur einige Funktionen zu einer vorhandenen Bibliothek hinzufügen müssen. Oder Sie können sogar native Bibliotheken ersetzen, indem Sie identisch benannte Versionen in Ihrem Anwendungs-/Bibliotheksordner ablegen.

Um also einen Drop-in-Ersatz für Ihre Bibliothek zu haben, könnten Sie Upload.php in Ihre kopieren

application/libraries

Ordner und fügen Sie dann Ihre benutzerdefinierte Logik zu dieser Upload.php-Datei hinzu. Code Igniter fügt diese Datei stattdessen ein, wenn Sie die Upload-Bibliothek laden.

Alternativ könnten Sie Ihre EIGENE benutzerdefinierte Uploader-Klasse erstellen, die das Original erweitert und nur die Funktion is_allowed_filetype verfeinert.

application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload{
    function is_allowed_filetype(){
         //my custom code here
    }
}

Sie werden überlesen wollen das Änderungsprotokoll wenn Sie ein Upgrade durchführen, aber dies ermöglicht es Ihnen, Ihren Code und den Kerncode in separaten Universen zu behalten.

  • Wie läuft die Magento-Codierung, Alan?

    – Ali

    10. Juni 2009 um 1:56 Uhr

Bisher sieht es so aus, als wäre das nur über einen Hack möglich.

Ich habe ein eingefügt return true in Zeile 556 in system/libraries/Upload.php.

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

Das lädt beliebige Dateiformate wie .exe oder .jpegs extra hoch …

Benutzer-Avatar
sfan

Wenn alles nicht funktioniert, ordnen Sie die zulässige Typreihenfolge wie im ersten Videoformat neu an

$config['allowed_types'] = 'mp4|jpg|png|'

Es wird in meinem Fall funktionieren, also habe ich es geteilt, wenn möglich, es auszuprobieren.

Sie müssen lediglich diese Bedingung ersetzen:

        if (! $this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

Mit:

        if (count($this->allowed_types) && !$this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

1047910cookie-checkWie lässt sich die CodeIgniter-Datei-Upload-Klasse dazu bringen, alle Erweiterungen zu akzeptieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy