Przesyłanie plików w PHP

Przez PHP można przesłać plik na serwer.

Tworzenie formularza przesyłania plików

Pozwolenie użytkownikom na przesyłanie plików z formularza jest bardzo przydatne.

Oto poniższy formularz HTML do przesyłania plików:

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

Proszę zwrócić uwagę na następujące informacje dotyczące tego formularza:

Atrybut enctype etykiety <form> określa, który typ zawartości powinien być używany podczas wysyłania formularza. W przypadku, gdy formularz wymaga danych binarnych, takich jak zawartość pliku, użyj "multipart/form-data".

Atrybut type="file" etykiety <input> określa, że wejście powinno być traktowane jako plik. Na przykład, podczas przeglądania w przeglądarce, zobaczysz przycisk przeglądania obok pola wejściowego.

Komentarz:Pozwolenie użytkownikom na przesyłanie plików jest ogromnym ryzykiem bezpieczeństwa. Pozwól tylko zaufanym użytkownikom wykonywać operacje przesyłania plików.

Tworzenie skryptu przesyłania plików

"upload_file.php" plik zawiera kod do przesyłania plików:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Błąd: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Wysyłanie: " . $_FILES["file"]["name"] . "<br />";
  echo "Typ: " . $_FILES["file"]["type"] . "<br />";
  echo "Rozmiar: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Zapisane w: " . $_FILES["file"]["tmp_name"];
  }
?>

Używając globalnej tablicy $_FILES PHP, możesz przesyłać pliki z komputera klienta do zdalnego serwera.

Pierwszy parametr to nazwa input formularza, drugi indeks może być "name", "type", "size", "tmp_name" lub "error". Jak tutaj:

  • $_FILES["file"]["name"] - nazwa załadowanego pliku
  • $_FILES["file"]["type"] - typ załadowanego pliku
  • $_FILES["file"]["size"] - rozmiar załadowanego pliku w bajtach
  • $_FILES["file"]["tmp_name"] - nazwa tymczasowej kopii pliku przechowywanego na serwerze
  • $_FILES["file"]["error"] - kod błędu powodowanego przez przesyłanie pliku

To jest bardzo prosty sposób przesyłania plików. Z powodu względów bezpieczeństwa, powinieneś dodać ograniczenia dotyczące tego, którzy użytkownicy mogą przesyłać pliki.

Ograniczenia przesyłania

W tym skrypcie dodaliśmy ograniczenia dotyczące przesyłania plików. Użytkownik może przesyłać tylko pliki .gif lub .jpeg, rozmiar pliku musi być mniejszy niż 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 "Błąd: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Wysyłanie: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Rozmiar: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Zapisane w: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Niepoprawny plik";
  }
?>

Komentarz:Dla IE, identyfikacja typu pliku jpg musi być pjpeg, dla FireFox,必须是 jpeg.

Zachowanie załadowanego pliku

W przykładzie powyżej utworzono tymczasową kopię załadowanego pliku w katalogu tymczasowym serwera PHP.

Tymczasowy kopia pliku zostanie usunięta po zakończeniu skryptu. Aby zachować załadowany plik, musimy go skopiować do innej lokalizacji:

<?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 "Kod zwrotny: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Wysyłanie: " . $_FILES["file"]["name"] . "<br />";
    echo "Typ: " . $_FILES["file"]["type"] . "<br />";
    echo "Rozmiar: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Tymczasowy plik: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " już istnieje. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Zapisane w: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Niepoprawny plik";
  }
?>

Powyższy skrypt sprawdza, czy plik istnieje, a jeśli nie, kopiuje go do wskazanego folderu.

Komentarz:Ten przykład zapisuje plik do nowego folderu o nazwie "upload".