File Uploading

PHP | Stefanescu Mihai | 2020-10-11

Un script PHP poate fi folosit in asa fel incat sa permita utilizatorilor upload-ul de fisiere. Initial fisierele sunt uploadate intr-un director temporar si apoi sunt mutate in directorul dorit.

Atentie: Upload-ul de fisiere este periculos! Va recomand sa nu permiteti upload-ul de fisiere php, html, js, etc

Configurare php.ini

In primul rand trebuie sa va asigurati ca upload-ul de fisiere este permis pe serverul vostru. Pentru a face acest lucru verificati optiunea file_uploads din php.ini sa fie setata pe On.

Formularul HTML

Acum trebuie sa facem un formular HTML ce ne va permite sa selectam o imagine pentru upload.

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Selectare Imagine:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload" name="submit">
</form>

</body>
</html>

Ce trebuie sa stii despre formularul de mai sus:

  • asigurati-va ca metoda este POST
  • Pentru upload de fisiere tag-ul <form> trebuie sa aiba atributul enctype=”multipart/form-data”.

Se poate observa rapid ca formularul de  mai sus va procesa upload-ul in fisierul upload.php.Scriptul de UploadFisierul upload.php va contine urmatorul cod:

<?php
$target_dir = "upload_imagini/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "Fisierul este imagine - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Fisierul nu este imagine.";
        $uploadOk = 0;
    }
}
?>

Explicatii cod:

PHP script explained:

  • $target_dir = “upload_imagini/” – folderul in care sunt salvate imaginile
  • $target_file – este calea unde sunt salvate imaginile
  • $uploadOk=1 folosim mai tarziu
  • $imageFileType – extensia fisierului

Va trebuii sa creati directorul “upload_imagini”

Verificare existenta fisier

Acum, ca am facut baza ar trebuii sa adaugam niste restrictii.

In primul rand trebuie sa verificam daca fisierul deja exista.Daca exista afisam un mesaj de eroare si setam variabila $uploadOk cu valoarea 0.

if (file_exists($target_file)) {
    echo "Fisierul deja exista.";
    $uploadOk = 0;
}

Limitare dimsniune fisierNumele input-ului file din formularul HTML este “fileToUpload”. Acum, dorim sa verificam dimensiunea acestui fisier. Daca este mai mare de 500kb afisam un mesaj de eroare si setam $uploadOk la 0.

if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Fisierul este prea mare.";
    $uploadOk = 0;
}

Verificare tip fisierCodul de mai jos permite upload-ul doar formatelor JPG, JPEG, PNG, si GIF.

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Format interzis.";
    $uploadOk = 0;
}

Scriptul completFisierul upload.phpva avea forma finala:

<?php
$target_dir = "upload_imagini/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "Fisierul este o imagine - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Fisierul nu este o imagine.";
        $uploadOk = 0;
    }
}
// Verificam daca deha exista
if (file_exists($target_file)) {
    echo "Fisierul deja exista.";
    $uploadOk = 0;
}
// Verificam dimensiunea
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Fisierul este prea mare.";
    $uploadOk = 0;
}
// Verificam formatul
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Format interzis.";
    $uploadOk = 0;
}
// verificam daca $uploadOk este 0
if ($uploadOk == 0) {
    echo "Fisierul nu a putut fi uploadat.";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "Fisierul ". basename( $_FILES["fileToUpload"]["name"]). " a fost uploadat.";
    } else {
        echo "Fisierul nu a putut fi mutat.";
    }
}
?>

 



Imi place ce faci aici
Daca iti place ce fac aici imi poti cumpara o cafea Buy Me a Coffee at ko-fi.com

Stefanescu Mihai
Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.
       

Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum.

Posteaza un comentariu

Comentarii

Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!

Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.

🗝ïļ Login 🌟 Register

🔖 Bookmarks ⊞
âœĻ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌊ïļ Discord ⊞

Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.

⮆ïļ