PHP tiedostojen lataus

PHP:n avulla voit ladata tiedoston palvelimelle.

Luo tiedoston latauslomake

Käyttäjän tiedoston lataaminen lomakkeesta on erittäin hyödyllistä.

Katso seuraava HTML-lomake, jolla tiedosto voidaan ladata:

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

Huomaa seuraavat tiedot tästä lomakkeesta:

<form>-tagin enctype-ominaisuus määrittää, minkä tyyppistä sisältöä käytetään lomakkeen lähettäessä. Kun lomakkeessa tarvitaan binaarisia tietoja, kuten tiedoston sisältöä, käytä "multipart/form-data".

<input>-tagin type="file"-ominaisuus määrittää, että syöte käsitellään tiedostona. Esimerkiksi selaimessa esitettäessä näet syötekentän viereisessä selailupainikkeen.

Huomautus:Käyttäjän tiedoston lataaminen on valtava turvallisuusriski. Salli vain luotettavien käyttäjien suorittaa tiedoston lataustoiminto.

Latausskriptin luominen

Tiedosto "upload_file.php" sisältää koodin tiedoston lataamista varten:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Virhe: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Lataus: " . $_FILES["file"]["name"] . "<br />";
  echo "Tyyppi: " . $_FILES["file"]["type"] . "<br />";
  echo "Koko: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Tallennettu: " . $_FILES["file"]["tmp_name"];
  }
?>

Käyttämällä PHP:n globaalia taulukkoa $_FILES voit ladata tiedoston asiakkaan tietokoneelta etäpalvelimelle.

Ensimmäinen parametri on lomakkeen input name, toinen indeksi voi olla "name", "type", "size", "tmp_name" tai "error". Esimerkiksi:

  • $_FILES["file"]["name"] - lähetetyn tiedoston nimi
  • $_FILES["file"]["type"] - lähetetyn tiedoston tyyppi
  • $_FILES["file"]["size"] - lähetetyn tiedoston koko, tietoksiin laskettuna
  • $_FILES["file"]["tmp_name"] - palvelimella tallennetun tiedoston tilapäisen kopion nimi
  • $_FILES["file"]["error"] - tiedoston lataamisesta aiheutunut virhekoodei

Tämä on erittäin yksinkertainen tapa ladata tiedostoja. Turvallisuussyistä sinun tulisi lisätä rajoituksia sille, kenellä on oikeus ladata tiedostoja.

Latausrajoitukset

Tässä skriptissä lisäsimme rajoituksia tiedoston lataamiselle. Käyttäjä voi ladata vain .gif- tai .jpeg-tiedostoja, ja tiedoston koko täytyy olla alle 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 "Virhe: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Lataus: " . $_FILES["file"]["name"] . "<br />";
    echo "Tyyppi: " . $_FILES["file"]["type"] . "<br />";
    echo "Koko: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Tallennettu: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Virheellinen tiedosto";
  }
?>

Huomautus:IE:ssä jpg-tiedoston tyyppi on oltava pjpeg, Firefoxissa jpeg.

Tallenna lähetetty tiedosto

Yllä olevassa esimerkissä palvelimen PHP tilapäisessä kansiossa luotiin lähetetyn tiedoston tilapäinen kopiointi.

Tämä tilapäinen kopioitu tiedosto katoaa skriptin päätyttyä. Jos haluamme tallentaa lähetetyn tiedoston, meidän täytyy kopioida se toiseen paikkaan:

<?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 "Palautuskoodei: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Lataus: " . $_FILES["file"]["name"] . "<br />";
    echo "Tyyppi: " . $_FILES["file"]["type"] . "<br />";
    echo "Koko: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Väliaikainen tiedosto: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " on jo olemassa. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Tallennettu: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Virheellinen tiedosto";
  }
?>

Yllä oleva skripti tarkistaa, onko tiedosto jo olemassa, eikä ole, siirtää tiedoston määrätylle kansiolle.

Huomautus:Tämä esimerkki tallensi tiedoston uuteen "upload"-kansioon.