PHP Filupload

Med PHP kan du uploade filer til serveren.

Opret en filupload-formular

At tillade brugere at uploade filer fra formularen er meget nyttigt.

Se nedenstående HTML-formular til filupload:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filnavn:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

Bemærk følgende oplysninger om denne formular:

属性 enctype på <form>-etiketten bestemmer, hvilken indholdstype der skal bruges ved indsendelse af formularen. Brug "multipart/form-data", når formularen kræver binær data, såsom filindhold.

属性 type="file" på <input>-etiketten bestemmer, at input skal behandles som en fil. For eksempel vil du se en browse-knap ved siden af inputfeltet, når du ser det i en browser.

Kommentar:At tillade brugere at uploade filer er en stor sikkerhedsrisiko. Tillad kun pålidelige brugere at udføre filupload.

Opret en upload-script

"upload_file.php" filen indeholder kode til at uploade filer:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Fejl: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Størrelse: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Gemt i: " . $_FILES["file"]["tmp_name"];
  }
?>

Ved hjælp af PHP's globale array $_FILES kan du uploade filer fra klientens computer til en fjern server.

Den første parameter er formularens input name, den anden indeks kan være "name", "type", "size", "tmp_name" eller "error". Som dette:

  • $_FILES["file"]["name"] - Navnet på den uploadede fil
  • $_FILES["file"]["type"] - Typen af den uploadede fil
  • $_FILES["file"]["size"] - Størrelsen på den uploadede fil i bytes
  • $_FILES["file"]["tmp_name"] - Navnet på den midlertidige kopi af filen gemt på serveren
  • $_FILES["file"]["error"] - Fejlkode for fejl ved filupload

Dette er en meget simpel måde at uploade filer på. Af sikkerhedsmæssige grunde bør du tilføje begrænsninger for, hvilke brugere der har ret til at uploade filer.

Uploadbegrænsninger

I dette skript har vi tilføjet begrænsninger for filupload. Brugere kan kun uploade .gif eller .jpeg-filer, og filstørrelsen skal være mindre end 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Fejl: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Størrelse: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Gemt i: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Ugyldig fil";
  }
?>

Kommentar:For IE skal typen af jpg-filen være pjpeg, for FireFox skal den være jpeg.

Gem den uploadede fil

I eksemplet blev en midlertidig kopi af den uploadede fil oprettet i serverens PHP midlertidige mappe.

Den midlertidige kopierede fil vil forsvinde, når skriptet afsluttes. For at gemme den uploadede fil skal vi kopiere den til en anden placering:

<?php
if ((($_FILES["file"]["type"] == "image/gif"))
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Retur kode: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Størrelse: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Midlertidig fil: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " allerede eksisterer. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Gemt i: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Ugyldig fil";
  }
?>

Den ovenstående skript kontrollerede om filen allerede eksisterede, og hvis den ikke gjorde det, kopierede den filen til den angivne mappe.

Kommentar:Dette eksempel gemte filen i en ny mappe kaldet "upload".