Umgang mit Datei-Upload in PHP

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

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>