Warning: session_start(): open(/www/htdocs/w017651d/tmp/wiki//sess_88afd0139e79119751aa7e9d11fc63c7, O_RDWR) failed: No such file or directory (2) in /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php on line 247

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php:247) in /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php:247) in /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/auth.php on line 424

Warning: session_write_close(): open(/www/htdocs/w017651d/tmp/wiki//sess_88afd0139e79119751aa7e9d11fc63c7, O_RDWR) failed: No such file or directory (2) in /www/htdocs/w017651d/wiki.blackcat-cms.org/doku.php on line 121

Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/www/htdocs/w017651d/tmp/wiki/) in /www/htdocs/w017651d/wiki.blackcat-cms.org/doku.php on line 121

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php:247) in /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/actions.php on line 210

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w017651d/wiki.blackcat-cms.org/inc/init.php:247) in /www/htdocs/w017651d/wiki.blackcat-cms.org/lib/tpl/dokuwiki/main.php on line 12
Uploads [BlackCat CMS Dokumentation, Tutorials, Tipps und Tricks]

Benutzer-Werkzeuge

Webseiten-Werkzeuge


core:helper:upload

Uploads

Der Upload-Helper basiert auf der class.upload.php von verot.net, die wir allerdings um die Bildbearbeitungsfunktionen bereinigt haben. (Hierzu haben wir class.Images.php zur Verfügung.) Die Handhabung von Dateiuploads wird hiermit wesentlich vereinfacht.

Ausgangslage

Es existiert eine Seite mit einem Dateiupload-Formular.

Hier können grundsätzlich beliebig viele Dateiupload-Felder vorhanden sein, es empfiehlt sich aber, nicht zu viele Dateien auf einmal zuzulassen. Es kann sonst sein, daß die Übertragung auf den Server zu lange dauert und es dadurch zu einem Script-Timeout kommt.

Auf der Serverseite existiert ein Script - z.B. ein Modul -, welches die Dateiuploads entgegen nimmt und weiter verarbeitet.

Alle hochgeladenen Dateien speichern

Hat man mehrere Upload-Felder, ist das die schnellste Variante. Die hierbei festgestellten Fehler werden hierbei in Form eines Arrays zurückgeliefert. Zusätzlich erhält man ein Boolean-Result, welches false ist, wenn es Fehler gab, ansonsten true.

Codebeispiel:

$dir = CAT_PATH.'/modules/myModule/upload';
list( $ok, $errors ) = CAT_Helper_Upload::uploadAll(
    'files',
    utf8_decode(CAT_Helper_Directory::sanitizePath($dir))
);

In diesem Beispiel werden alle Dateien, die über das Formular hochgeladen wurden, in das Verzeichnis CAT_PATH/modules/myModule/upload übertragen. Der Parameter files beinhaltet den Namen des Upload-Formularfeldes.

    <input type="file" name="files" id="files" />

Die Variable $ok hat den Wert true, wenn alle Dateien erfolgreich verarbeitet werden konnten. Ist dies nicht der Fall, beinhaltet $errors eine Liste der festgestellten Fehler.

Die Verwendung von utf8_decode() stellt sicher, daß Verzeichnisnamen mit Umlauten korrekt verarbeitet werden können. Es kann genau wie CAT_Helper_Directory::sanitizePath() weggelassen werden.

Einzelne Datei verarbeiten

Die Syntax ist in diesem Fall angelehnt an die class.upload.php, welche ja auch die Basis darstellt. Kurzform:

    CAT_Helper_Upload::getInstance(<Dateiname>)->process(<Verzeichnis>);

Ein bißchen mehr Kontrollmöglichkeiten erhält man durch eine Aufteilung der Kommandos.

// Instanz erzeugen
$current = CAT_Helper_Upload::getInstance($_FILES['file']);
// prüfen, ob die Datei tatsächlich hochgeladen wurde
if ( $current->uploaded ) {
    // ok, hochgeladene Datei in das gewünschte Verzeichnis verschieben
    $current->process(CAT_PATH.'/modules/myModule/upload');
    // Erfolg prüfen
    if ( $current->processed )
    {
        // ... usw. ...
    }
}

Mehr Informationen sind in der Original-Dokumentation zur class.upload.php zu finden:

http://www.verot.net/php_class_upload_docs.htm

Prinzipiell gelten alle Informationen, die nichts mit Bildbearbeitung zu tun haben.

core/helper/upload.txt · Zuletzt geändert: 2014/07/16 00:00 (Externe Bearbeitung)