MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Trimiterea fișierelor pe server

Pentru a încărca un fișier pe server, trebuie să folosim un formular cu parametrul enctype="multipart/form-data" și array-ul $_FILES. Așadar, vom crea fișierul upload.php cu următorul conținut:

<!DOCTYPE html>
<html>
<head>
<title>FDC.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if ($_FILES && $_FILES["filename"]["error"]== UPLOAD_ERR_OK)
{
   $name = $_FILES["filename"]["name"];
   move_uploaded_file($_FILES["filename"]["tmp_name"], $name);
   echo "Fișier încărcat";
}
?>
<h2>Încărcare fișier</h2>
<form method="post" enctype="multipart/form-data">
Selectați fișierul: <input type="file" name="filename" size="10" /><br /><br />
<input type="submit" value="Încărcați" />
</form>
</body>
</html>

Aici este definit un formular cu atributul enctype="multipart/form-data". Formularul conține un câmp special pentru selectarea fișierului.

Toate fișierele încărcate ajung în array-ul asociativ $_FILES. Pentru a determina dacă există fișiere încărcate, putem folosi construcția if: if ($_FILES).

Array-ul $_FILES este bidimensional. Putem încărca un set de fișiere, iar fiecare fișier încărcat poate fi obținut prin cheia care corespunde valorii atributului name.

Deoarece elementul pentru încărcarea fișierului în formular are name="filename", putem obține acest fișier cu expresia $_FILES["filename"].

Fiecare obiect fișier are propriile sale parametri, pe care îi putem obține:

  • $_FILES["file"]["name"]: numele fișierului
  • $_FILES["file"]["type"]: tipul conținutului fișierului, de exemplu, image/jpeg
  • $_FILES["file"]["size"]: dimensiunea fișierului în octeți
  • $_FILES["file"]["tmp_name"]: numele fișierului temporar salvat pe server
  • $_FILES["file"]["error"]: codul de eroare la încărcare

De asemenea, putem verifica prezența erorilor la încărcare. Dacă nu există eroare, câmpul $_FILES["filename"]["error"] conține valoarea UPLOAD_ERR_OK.

La trimiterea fișierului pe server, acesta este mai întâi încărcat într-un loc temporar, de unde apoi, cu ajutorul funcției move_uploaded_file(), este mutat în directorul serverului unde se află scriptul "upload.php".

De asemenea, putem specifica un alt traseu. De exemplu, să presupunem că pe server există un folder "upload". Pentru a încărca fișiere în acest folder, trebuie să specificăm calea corespunzătoare:

if ($_FILES && $_FILES["filename"]["error"]== UPLOAD_ERR_OK)
{
   $name = "upload/" . $_FILES["filename"]["name"];
   move_uploaded_file($_FILES["filename"]["tmp_name"], $name);
   echo "Fișier încărcat";
}

Funcția move_uploaded_file() primește doi parametri: calea către fișierul temporar încărcat și calea unde trebuie plasat fișierul încărcat.

Limitări și configurarea încărcării

În mod implicit, dimensiunea fișierelor încărcate este limitată la 2 MB. Totuși, putem configura această valoare în fișierul de configurare. Să modificăm această valoare, de exemplu, la 10 MB. Pentru aceasta, vom găsi în fișierul php.ini următoarea linie:

upload_max_filesize = 2M

O vom modifica la:

upload_max_filesize = 10M

De asemenea, putem configura folderul pentru fișierele încărcate temporar. Pentru aceasta, în fișierul php.ini vom găsi următoarea linie:

;upload_tmp_dir =

O vom modifica la:

upload_tmp_dir = "C:/php/upload"

De asemenea, în directorul php trebuie să creăm folderul upload.

Încărcare multiplă

Vom modifica scriptul upload.php astfel încât să suporte încărcarea multiplă:

<!DOCTYPE html>
<html>
<head>
<title>FDC.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if($_FILES)
{
   foreach ($_FILES["uploads"]["error"] as $key => $error) {
       if ($error == UPLOAD_ERR_OK) {
           $tmp_name = $_FILES["uploads"]["tmp_name"][$key];
           $name = $_FILES["uploads"]["name"][$key];
           move_uploaded_file($tmp_name, "$name");
       }
   }
   echo "Fișiere încărcate";
}
?>
<h2>Încărcare fișier</h2>
<form method="post" enctype="multipart/form-data">
   <input type="file" name="uploads[]" /><br />
   <input type="file" name="uploads[]" /><br />
   <input type="file" name="uploads[]" /><br />
   <input type="submit" value="Încărcați" />
</form>
</body>
</html>

Fiecare câmp de selectare a fișierului are atributul name="uploads[]", astfel încât serverul va trata setul de fișiere trimise ca pe un singur array.

Apoi, folosind un ciclu foreach, trecem prin toate fișierele și le salvăm în directorul web-site-ului.

← Lecția anterioară Lecția următoare →