Przesyłanie plików w PHP
- Poprzednia strona Tworzenie i zapis plików w PHP
- Następna strona Ciasteczka 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".
- Poprzednia strona Tworzenie i zapis plików w PHP
- Następna strona Ciasteczka PHP