File Uploading

postat acum 2 ani de Stefanescu Mihai in categorie PHP

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.";
    }
}
?>

 

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group
Acest articol a fost mutat de pe vechea platforma.
Pentru orice eroare aparuta la mutare va rog sa ma contactati!