<?php
/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
*     
http://www.webcafe.dk/artikler/php/upload/*/
/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = "./upload";
/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "2000";
/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}
/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}
if($_FILES["upfil"]["size"] > 0) {
  /**
   * Hvis der er en fil, saa uploader vi den.
   *
   * Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
   */
  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];
  /**
   *  Checker lige om filen er for stor til at vi vil acceptere den.
   *  Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
   *  situation, at fejlmeldingen siger, at filen er for stor, men angiver
   *  samme stoerrelse for filen og den oevre graense.
   */
  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("Desværre - filen er for stor. Jeg accepterer kun " .
           $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
           ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }
  header("location: site-upload.PHP");
  exit;
} else {
  /**
   * Intet tegn paa upload, saa vi viser bare listen over filer
   * og HTML-formularen til nye uploads.
   */
  $indhold .= bygFormular($_SERVER["PHP_SELF"]);
  $output = bygSide("hej", $indhold);
}
/**
* Skriver ud til browseren
*/
echo $output;
exit;
/**************************************************\
**              Hjaelpefunktioner               **
\**************************************************/
function bygSide($titel, $indhold) {
  /**
   * Pakker indholdet ind i lidt formalia
   */
  return '<html>
            <head><title>' . $titel . '</title></head>
            <body bgcolor="#ffffff">
              <div align="right"><a href="./"></a></div>
              ' . $indhold . '</body>
          </html>
         ';
}
function bygFormular($action) {
  $formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
                 <table border="1" cellpadding="5" cellspacing="0">
                   <tr>
                     <td align="center" bgcolor="#cccccc"><b>angiv en fil</b></td>
                     <td bgcolor="#cccccc"><input type="file" name="upfil" /></td>
                   </tr>
                   <tr>
                     <td colspan="2" align="middle" bgcolor="#cccccc"><input type="submit" value="upload" /></td>
                   </tr>
                 </table>
               </form>
              ';
  return "<h2>Upload fil:</h2>" . $formular;
}
function listFiler($bibliotek) {
  if($bib = @opendir($bibliotek)) {
    /**
     * Denne syntaks er forklaret i PHP-manualen:
     * 
http://www.php.net/manual/en/function.readdir.php     */
    while (false !== ($fil = readdir($bib))) {
      if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
          $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
      }
    }
    closedir($bib);
    if(is_array($fil_liste)) {
      $liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
    } else {
      $liste = "<li>Ingen filer på lager</li>";
    }
    return "<h2>Filer på lager:</h2><ul>" . $liste . "</ul>";
  } else {
    die("Kunne ikke åbne biblioteket: " . $bibliotek);
  }
}
?>
---------
jeg har fjernet:
  $indhold = listFiler($konfiguration["upload_bibliotek"]);
da jeg ikke ville have den til at vise fil'erne.