Umgang mit Datei-Upload in PHP |
|
Hier habe ich noch nicht viel Erklärungen. Die Klasse wird auch noch erweitern. Wer sich aber schon ein bissel was ansehen möchte. <script language="php"> /** * Funktionen zum Handling von Datei-Uploads. * @package Tools * @subpackage FileUpload */ /** * Klasse zum Handling von Datei-Uploads. * * http://de.php.net/manual/de/features.file-upload.php */ class upload { /** * Liefert eine Liste(Array) mit allen Schluesseln von hochgeladenen Dateien. * * Die Schluessel entsprechen den Namen der Input-Felder vom Typ "file" * im HTML-Formular. * * @return array numerisch indizieres Array mit den Namen der Schluessel */ function get_upload_keys() // {{{ { return array_keys($_FILES); } // }}} /** * Liefert den Namen der temporaeren Upload-Datei. * * @return bool|string Dateiname bei erfolg. Sonst False. */ function get_tmp_filename($key) // {{{ { if(!isset($_FILES[$key])) { user_error(__CLASS__."::".__FUNCTION__.": upload-key not found: $key"); return false; } if($_FILES[$key]["error"] != UPLOAD_ERR_OK) { $this->get_error($key, $errnum, $errmsg); user_error(__CLASS__."::".__FUNCTION__.": uploadet-error: $key\n" ."errnum=$errnum: $errmsg"); return false; } return $_FILES[$key]["tmp_name"]; } // }}} /** * Laedt eine hochgeladene Datei. * * Die Funktion prueft, ob der Schluessel zulessig ist, ob es einen * Fehler bein Upload gab und ob die Datei wirklich eine Hochgeladenen * Datei ist. * * @param string $key Schluessel * @param string $filename Referenz in der der Dateiname abgelegt wird. * @param integer $filesize Referenz in der die Dateigroesse abgelegt wird. * @param string $content_type Referenz in der der Typ der Datei abgelegt wird. * @param string|blob $filedata Referenz in der die Daten der Datei abgelegt werden. * @return bool True bei Erfolg sonst False. */ function load_file($key, &$filename, &$filesize, &$content_type, &$filedata) // {{{ { if(!isset($_FILES[$key])) { user_error(__CLASS__."::".__FUNCTION__.": upload-key not found: $key"); return false; } if($_FILES[$key]["error"] != UPLOAD_ERR_OK) { $this->get_error($key, $errnum, $errmsg); user_error(__CLASS__."::".__FUNCTION__.": uploadet-error: $key\n" ."errnum=$errnum: $errmsg"); return false; } if(!is_uploaded_file($_FILES[$key]["tmp_name"])) { user_error(__CLASS__."::".__FUNCTION__.": is not an uploadet-file: $key"); return false; } $fp = fopen($_FILES[$key]["tmp_name"], "r"); if(!$fp) { user_error(__CLASS__."::".__FUNCTION__.": can't open uploaded file", ERROR); return false; } $filename = $_FILES[$key]["name"]; $filesize = $_FILES[$key]["size"]; $content_type = $_FILES[$key]["type"]; $filedata = fread($fp, $filesize); fclose($fp); return true; } // }}} /** * Ermittelt, fuer den uebergebenen Schluessel, ob es einen Upload-Error gab. * * @param string $key Schluessel * @param integer $errnum Referenz in die die Fehlernummer abgelegt wird. * @param string $errmsg Referenz in die der Fehlertext abgelegt wird. * @return bool True, wenn ein Fehler aufgetreten ist. Sonst False. */ function get_error($key, &$errnum, &$errmsg) // {{{ { $errmsgs = array( UPLOAD_ERR_OK => "", UPLOAD_ERR_INI_SIZE => "Die hochgeladene Datei überschreitet die in der Anweisung". " upload_max_filesize in php.ini festgelegte Größe.", UPLOAD_ERR_FORM_SIZE => "Die hochgeladene Datei überschreitet die in dem HTML Formular". " mittels der Anweisung MAX_FILE_SIZE angegebene maximale". " Dateigröße.", UPLOAD_ERR_PARTIAL => "Die Datei wurde nur teilweise hochgeladen.", UPLOAD_ERR_NO_FILE => "Es wurde keine Datei hochgeladen.", ); $errnum = $_FILES[$key]["error"]; $errmsg = $errmsgs[$errnum]; return $errnum==UPLOAD_ERR_OK ? false : true; } // }}} } // vim: filetype=php </script> |

Eine Klasse für das Händling von Datei-Uploads.