PHP filuppladdning

Genom PHP kan du ladda upp filer till servern.

Skapa ett filuppladdningsformulär

Att tillåta användare att ladda upp filer från formulär är mycket användbart.

Se nedan detta HTML-formulär för filuppladdning:

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

Observera följande information om detta formulär:

Egenskapen enctype på <form>-taggen specificerar vilken innehållstyp som ska användas vid inlämning av formulär. Använd "multipart/form-data" när formuläret behöver binär data, till exempel filinnehåll.

Egenskapen type="file" på <input>-taggen specificerar att inmatningen ska behandlas som en fil. Till exempel, när du förhandsgranskar i webbläsaren, kommer du att se en surfknapp bredvid inmatningsrutan.

Kommentar:Att tillåta användare att ladda upp filer är en stor säkerhetsrisk. Låt endast pålitliga användare utföra filuppladdningsåtgärder.

Skapa en uppladdningsskript

Filen "upload_file.php" innehåller kod för att ladda upp filer:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Fel: " . $_FILES["file"]["error"] . "<br />";
  }
annars
  {
  echo "Ladda upp: " . $_FILES["file"]["name"] . "<br />";
  echo "Typ: " . $_FILES["file"]["type"] . "<br />";
  echo "Storlek: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Lagrad i: " . $_FILES["file"]["tmp_name"];
  }
?>

Genom att använda PHP:s globala array $_FILES kan du ladda upp filer från kundens dator till en fjärrserver.

Den första parametern är formulärets input name, den andra index kan vara "name", "type", "size", "tmp_name" eller "error". Som så här:

  • $_FILES["file"]["name"] - Namnet på den uppladdade filen
  • $_FILES["file"]["type"] - Typen på den uppladdade filen
  • $_FILES["file"]["size"] - Storleken på den uppladdade filen i bytes
  • $_FILES["file"]["tmp_name"] - Namnet på den tillfälliga kopian av filen som lagras på servern
  • $_FILES["file"]["error"] - Felkod som orsakas av filuppladdning

Detta är ett mycket enkelt sätt att ladda upp filer. Av säkerhetsskäl bör du lägga till begränsningar för vilka användare som har rätt att ladda upp filer.

Upploadsgränser

I detta skript har vi lagt till begränsningar för filuppladdning. Användare kan bara ladda upp .gif- eller .jpeg-filer, och filstorleken måste vara mindre än 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 "Fel: " . $_FILES["file"]["error"] . "<br />";
    }
  annars
    {
    echo "Ladda upp: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Storlek: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Lagrad i: " . $_FILES["file"]["tmp_name"];
    }
  }
annars
  {
  echo "Ogiltig fil";
  }
?>

Kommentar:För IE måste typen av jpg-fil identifieras som pjpeg, för FireFox måste det vara jpeg.

Spara den uppladdade filen

I det föregående exemplet skapades en tillfällig kopia av den uppladdade filen i den tillfälliga PHP-mappen på servern.

Denna tillfälliga kopia av filen kommer att försvinna när skriptet avslutas. För att spara den uppladdade filen måste vi kopiera den till ett annat ställe:

<?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 "Återvärdskod: " . $_FILES["file"]["error"] . "<br />";
    }
  annars
    {
    echo "Ladda upp: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Storlek: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp fil: " . $_FILES["file"]["tmp_name"] . "<br />";
    om (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " redan finns. ";
      }
    annars
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Lagrad i: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
annars
  {
  echo "Ogiltig fil";
  }
?>

Ovanstående skript kontrollerar om filen redan finns, och om den inte finns, kopieras filen till den angivna mappen.

Kommentar:Detta exempel sparade filen i en ny mapp som heter "upload".