E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

Formular de upload PHP

04.05.2010
Formular de upload PHP

In acest tutorial va voi arata cum sa creati un formular HTML cu ajutorul caruia veti putea incarca fisiere pe site, incepand de la structura HTML a formularului pana la codul PHP. In plus, va voi explica cum se pot seta foarte usor tipul fisierelor acceptate si marimea maxima a acestora.

Total vizualizari: 9421 9421 afisari   |   Comentarii  6   |   Rating   |   (4 voturi)   |   Timp necesar: 20 min 20 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Autor: mozzartut Expert
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

In acest tutorial va voi arata cum sa creati un formular HTML cu ajutorul caruia veti putea incarca fisiere pe site, incepand de la structura HTML a formularului pana la codul PHP. In plus, va voi explica cum se pot seta foarte usor tipul fisierelor acceptate si marimea maxima a acestora.

Aici poti vedea un demo al formularului pe care il vom realiza.

Ce sunt formularele Html?

Formularele reprezinta o metoda de interactivitate cu utilizatorii unei pagini web. Prin intermediul unui formular se pot obtine date importante de la vizitatorii unui site. Pentru a defini un formular, este nevoie ca acesta sa fie incadrat de tag-urile <form> si </form>.

Instructiunea <form> are 2 atribute foarte importante: ACTION si METHOD.

  • Cu ajutorul atributului ACTION ii spunem browser-ului ce se va intampla cu datele introduse in formular, cu alte cuvinte fisierul care va primi aceste date si le va prelucra.
  • Dupa ce formularul a fost completat, utilizatorul apasa un buton de trimitere, apoi datele vor fi procesate cu ajutorul unui limbaj de programare. Atributul METHOD, asa cum ii spune si numele, precizeaza metoda de trimitere a datelor si poate avea doua valori. Valoarea implicita a acestui atribut este GET, cu ajutorul acestei metode putand fi trimise cantitati mici de date, dar cea mai folosita metoda este POST, ce permite transmiterea mai multor informatii, de dimensiuni mai mari.

Mai jos poti vedea codul HTML pentru un formular simplu. Acesta contine un singur camp de tip fisier (file) si un buton de trimitere (submit).

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="userfile" id="file"> <br />
  <input type="submit" value="Upload" class="buton"/>
</form>

Dupa cum poti observa, campul fisier are denumirea userfile. Aceasta denumire este importanta deoarece fisierul va fi preluat din formular utilizand aceasta denumire.

 OBS.   Pentru a putea incarca fisiere, tag-ul form trebuie sa contina atributul enctype="multipart/form-data". In caz contrar, campul userfile va fi transmis, dar valoarea sa va fi una nula.


Preluarea fisierului incarcat

In continuare ne vom ocupa de fisierul upload.php, ce are ca scop preluarea fisierului incarcat in formular si salvarea acestuia pe server.

Permitem utilizatorului sa uploadeze doar imagini jpg, gif, bmp si png (celelalte tipuri de fisiere, posibil malitioase, cum ar fi fisiere executabile, fisiere .php, fisiere .js nu pot fi urcate). Cu ajutorul functiei substr() vom delimita extensia fisierului, de care avem nevoie pentru a o putea verifica. Aceasta portiune este cuprinsa intre caracterul . ( a carui pozitie o vom calcula cu functia strpos()) si sfarsitul denumirii fisierului (pe care il vom afla cu functia strlen() ce returneaza lungimea unui sir de caractere).

Iata un mic exemplu pentru a intalege mai bine cum functioneaza codul:

<?php
//Numele fisierului.
$filename = "poza.bmp"; 
 
//Aflam extensia fisierului.
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
echo "$ext";
?>

Rezultatul executiei scriptului de mai sus va fi afisarea textului ".bmp".

Un alt lucru de care trebuie sa tii cont este ca atunci cand un fisier este transmis de catre un formular, acesta este incarcat intr-un director temporar pe server. Pentru a-l pastra pe server, el trebuie salvat intr-un alt director de catre scriptul .php ce prelucreaza datele din formular.

Iata codul din fisierul upload.php:

<?php
/* 
Titlu: Simple Upload
Autor: Mozzartut
Website: http://mozzartut.isgreat.org/simple-upload.php
*/
 
// Definim un array cu tipurile de fisiere suportate (de ex. jpg/gif/bmp/png)
$allowed_filetypes = array('.jpg','.gif','.bmp','.png');
 
// Marimea maxima a unui fisier (0.5MB)
$max_filesize = 524288; 
 
// Definim calea catre directorul ce contine fisierele incarcate (files)
$upload_path = './files/'; 
 
// Preluam numele fisierului din formular
$filename = $_FILES['userfile']['name']; 
 
// Aflam extensia fisierului
$ext = substr($filename, strpos($filename,'.'), 
strlen($filename)-1); 
 
// Verificam daca fisierul este acceptat. (jpg/gif/bmp/png)
if(!in_array($ext,$allowed_filetypes))
    die('Acest fisier nu este acceptat.');
 
// Verificam marimea fisierului (max 0.5MB)
if(filesize($_FILES['userfile']['tmp_name']) > $max_filesize)
    die('Marimea fisierului este mai mare de 0.5MB.');
 
// Cream folderul "files" daca acesta nu exista
if (!is_dir('files')) {
    mkdir('files', 0777);
}
 
// Verifica daca folderul exista si poate fi accesat. (files)
if(!is_writable($upload_path))
    die('Folderul specificat nu poate fi accesat. (CHMOD 777)');
 
// Mutam fisierul in folderul specificat. (files)
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_path . $filename))
    echo 'Fisierul a fost salvat cu succes. 
          <a href="' . $upload_path . $filename . '" title="fisier" target="_blank"><br/><img src="' . $upload_path . $filename . '" width="120px"/></a>';
else
    echo 'A aparut o eroare. Mai incearca odata.';
    
echo "<br/><a href='index.php'>Incarca un fisier</a>";
?>

Sper ca acest tutorial sa va fie de folos. Daca aveti intrebari, nu ezitati sa-mi trimiteti un mesaj sau sa scrieti un comentariu.

Pagina:
1
comenteaza printeaza

Cuvinte cheie:   php,   upload,   file,   formular,   post,   get,   input,   marime fisier,   filesize,   extensie,   jpg,   bmp,   gif,   png,   move_uploaded_file

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(4 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (6) spune-ti parerea
alexandra alexandra , Duminica, 13 Ianuarie 2013, ora 08:15
#6

@decenium

Se pot incarca orice tipuri de fisiere, dar scopul aici era sa uploadeze o imagine vizibila intr-un browser. Daca vrei sa permiti alte extensii, poti modifica array-ul respectiv.

Raporteaza acest comentariu ca injurios!
decenium decenium , Vineri, 11 Ianuarie 2013, ora 11:00
#5

Buna , este ok tutorialul dar am totusi o nelamurire si anume , doream sa adaug niste extensii de fisiere in plus dar nu ma lasa, oare de ce ? intru-un array poti pune numai 4 tipuri de extensii ?. Multumesc

Raporteaza acest comentariu ca injurios!
ionutphp , Vineri, 06 Aprilie 2012, ora 00:55
#4

Foarte bun tutorial,mersi!

Raporteaza acest comentariu ca injurios!
sorin.voica sorin.voica , Miercuri, 06 Iulie 2011, ora 18:29
#3

Foarte buna initiativa, bravo! :)

Cred totusi ca cea mai buna si rapida varianta de a afla extensia unui fisier ar fi prin functia pathinfo() [ http://www.php.net/pathinfo ]

$ext = pathinfo($filename, PATHINFO_EXTENSION);

In acelasi timp, daca cel care a postat tutorialul considera ca aceste comentarii imbunatatesc codul initial, n-ar fi frumos sa modifice si articolul? :)

Raporteaza acest comentariu ca injurios!
mozzartut mozzartut , Miercuri, 05 Mai 2010, ora 21:30
#2

@alexandra
Buna observatia:)

// Aflam extensia fisierului (update)
$ext = substr($filename, -4);

Raporteaza acest comentariu ca injurios!
alexandra alexandra , Miercuri, 05 Mai 2010, ora 17:25
#1

Util tutorial :) O singura observatie am - cand verifici extensia fisierului, s-ar putea sa dai peste niste cascati care sa uploadeze fisiere cu punct in denumire - ceva de genul bla.bla.jpg, si atunci strpos-ul nu mai e relevant. Ar exista doua solutii:

1. le pui un mesaj in formular si le zici sa evite punctele in denumirea fisierelor

2. iei ca extensie ultimele 3 caractere din nume (substr cred ca iti permite sa incepi si de la coada unui string, dandu-i valori negative - de genul "substr(numefisier,-3)" pt extensie).

Eu personal as sugera cea de-a doua solutie ;)

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5565
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
5540
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
5385
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
5365
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
5120
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
RoR Illustrator StyleSheet Gimp XML Action Script Powerpoint HTML Word Excel Python Fireworks Flash SEO XHTML Ruby on Rails SWF Fotografie Lightroom Bridge Outlook AJAX MySQL Sony Vegas CSS PHP Photoshop Swift 3D Java Javascript Verilog Dreamweaver JSON Vista PSD COREL DRAW
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software