PHP - przesyłanie plików
Skrypt PHP może być używany z formularzem HTML, aby umożliwić użytkownikom przesyłanie plików na serwer. Początkowo pliki są przesyłane do katalogu tymczasowego, a następnie przenoszone do miejsca docelowego przez skrypt PHP.
Informacje w phpinfo.php strona opisuje katalog tymczasowy używany do przesyłania plików jako upload_tmp_dir a maksymalny dozwolony rozmiar plików, które można przesłać, to upload_max_filesize. Te parametry są ustawiane w pliku konfiguracyjnym PHPphp.ini
Proces przesyłania pliku obejmuje następujące kroki -
Użytkownik otwiera stronę zawierającą formularz HTML zawierający pliki tekstowe, przycisk przeglądania i przycisk przesyłania.
Użytkownik klika przycisk przeglądania i wybiera plik do przesłania z lokalnego komputera.
Pełna ścieżka do wybranego pliku pojawia się w polu tekstowym, a następnie użytkownik klika przycisk przesyłania.
Wybrany plik jest wysyłany do katalogu tymczasowego na serwerze.
Skrypt PHP, który został określony jako procedura obsługi formularza w atrybucie akcji formularza, sprawdza, czy plik dotarł, a następnie kopiuje go do odpowiedniego katalogu.
Skrypt PHP potwierdza użytkownikowi sukces.
Jak zwykle podczas zapisywania plików, zarówno tymczasowe, jak i końcowe lokalizacje muszą mieć ustawione uprawnienia umożliwiające zapisywanie plików. Jeśli którykolwiek jest ustawiony jako tylko do odczytu, proces zakończy się niepowodzeniem.
Przesłany plik może być plikiem tekstowym, plikiem obrazu lub dowolnym dokumentem.
Tworzenie formularza przesyłania
Poniższy kod HTM poniżej tworzy formularz do przesyłania. Ten formularz ma atrybut metody ustawiony napost a atrybut enctype jest ustawiony na multipart/form-data
<?php
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"images/".$file_name);
echo "Success";
}else{
print_r($errors);
}
}
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit"/>
</form>
</body>
</html>
To da następujący wynik -
Tworzenie skryptu przesyłania
Istnieje jedna globalna zmienna PHP o nazwie $_FILES. Ta zmienna jest skojarzoną tablicą dwuwymiarową i przechowuje wszystkie informacje związane z przesłanym plikiem. Więc jeśli wartość przypisana do atrybutu nazwy wejścia w formularzu przesyłania tofile, to PHP utworzy pięć następujących zmiennych -
$_FILES['file']['tmp_name'] - przesłany plik w katalogu tymczasowym na serwerze WWW.
$_FILES['file']['name'] - rzeczywista nazwa przesłanego pliku.
$_FILES['file']['size'] - rozmiar w bajtach przesłanego pliku.
$_FILES['file']['type'] - typ MIME przesyłanego pliku.
$_FILES['file']['error'] - kod błędu powiązany z przesyłaniem tego pliku.
Przykład
Poniższy przykład powinien umożliwiać przesyłanie zdjęć i zwraca wynik jako przesłane informacje o pliku.
<?php
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152) {
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true) {
move_uploaded_file($file_tmp,"images/".$file_name);
echo "Success";
}else{
print_r($errors);
}
}
?>
<html>
<body>
<form action = "" method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "image" />
<input type = "submit"/>
<ul>
<li>Sent file: <?php echo $_FILES['image']['name']; ?>
<li>File size: <?php echo $_FILES['image']['size']; ?>
<li>File type: <?php echo $_FILES['image']['type'] ?>
</ul>
</form>
</body>
</html>
To da następujący wynik -