Aplicatie: sa se incarce (copieze) un fisier de pe calculatorul personal pe server
Formularul folosit pentru upload este unul special, avand un parametru obligatoriu (enc-type) si metoda POST.
Important de verificat, pentru ca functionalitatea de upload sa fie activata:
- directiva file_uploads din php.ini trebuie sa fie 'on'
- directiva upload_tmp_dir din php.ini trebuie sa se refera la o cale existenta pe server si cu permisiuni suficiente pentru ca web-serverul sa poata crea fisiere
- directivele upload_max_filesize si post_max_size din php.ini specifica marimea maxima a fisierului si respectiv a datelor ce pot fi transmise prin intermediul formularului; este recomandat ca aceste valori sa fie revizuite
- atributul enctype="multipart/form-data" NU TREBUIE omis, altfel uploadul nu va functiona
Formularul trebuie sa contina un input de tip FILE, ca in exemplul de mai jos.
<!-- Encoding type, specificat de atributul enctype, TREBUIE specificat ca mai jos --> <form enctype="multipart/form-data" action="upload.php" method="POST"> Incarca un fisier: <input name="fisier" type="file" /> <input type="submit" value="Trimite fisier" /> </form>
Nota asupra mecanismului de upload:
- web serverul copiaza fisierul transmis de utilizator intr-o locatie temporara (specificata de directiva upload_tmp_dir)
- interpretorul PHP este invocat, avand variabila $_FILES populata cu informatii despre upload
- Programatorul este responsabil cu prelucrarea fisierului incarcat pe server (mutare intr-o alta locatie, citire, copiere, etc), prelucrare ce se face cu ajutorul functiilor puse la dispozitie de PHP. Daca fisierul incarcat nu este mutat (sau redenumit) din locatia temporara, acesta va fi sters automat la terminarea executiei scriptului (la finalul requestului, mai exact).
Fisierul PHP (upload.php) ce va prelucra uploadul contiune urmatoarea secventa de cod (include si validare).
<?php # se verifica daca fisierul incarcat a depasit dimensiunea maxima acceptata # daca acest lucru se intampla, variabilele $_POST si $_FILES se golesc automat if( empty( $_POST ) && empty( $_FILES ) ) { # a fost facut un POST sau nu? if( isset( $_SERVER['CONTENT_LENGTH'] ) ) { # atunci cand se trimit date prin post variabila $_SERVER['CONTENT_LENGTH'] # contine valoarea dimensiunii datelor $POST_MAX_SIZE = ini_get('post_max_size'); if( !empty( $POST_MAX_SIZE ) ) { # determin limita maxima (care poate fi in KB, MB sau GB $mul = substr($POST_MAX_SIZE, -1); $mul = ($mul == 'M' ? 1048576 :( $mul == 'K' ? 1024 :($mul == 'G' ? 1073741824 : 1))); if ( $_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE ) { print "Fisier prea mare! Ati depasit limita maxima permisa"; } } else { print "Eroare nespecificata (probabil fisierul este prea mare)"; } } else { # nu s-a facut inca submit la fisier, afisez un mesaj print "Apasati pe 'Trimite fisier' pentru a face upload!"; } } else { # $_POST si $_FILES sunt setate; verific alte erori ce pot sa apara if( $_FILES['fisier']['error'] > 0 ) { print "A intervenit o eroare (#{$_FILES['fisier']['error']})"; } else { # fisierul uploadat va fi pus in subfolderul 'upload' (care trebuie sa # existe deja in aceeasi locatie ca si fisierul upload.php $uploaddir = dirname( __FILE__ ). DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR; $uploadfile = $uploaddir . basename($_FILES['fisier']['name']); if (move_uploaded_file($_FILES['fisier']['tmp_name'], $uploadfile)) { print "Fisier incarcat cu succes!"; } else { print "Nu s-a putut incarca fisierul"; } } } ?>
Aplicatie: sa se incarce mai multe fisiere pe server in acelasi timp
Formularul contine mai multe elemente de tip INPUT FILE, denumite sub forma unui vector (array):
<form action="" method="post" enctype="multipart/form-data"> <p>Fisiere: <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="file" name="pictures[]" /> <input type="submit" value="Incarca" /> </p> </form>
Codul PHP pentru prelucrarea uploadului trebuie scris in acelasi fisier ca si formularul (Nota: acesta este o in varianta cu validari minimale)
<?php # pentru fiecare fisier incarcat, fac o verificare dupa status code if( !empty( $_FILES ) ) foreach ($_FILES["pictures"]["error"] as $key => $error) { if ($error > 0) { # echivalent cu ( $_FILES["pictures"]["error"][$key] > 0 ) print "Eroare cu fisierul {$_FILES["pictures"]["tmp_name"][$key]}!"; } else { $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; $name = $_FILES["pictures"]["name"][$key]; # mut fisierul din locatia temporara in directorul curent (acelasi # director in care se afla scriptul PHP) move_uploaded_file($tmp_name, "$name"); } } ?>
Da si u un exemplu de formular de comentarii,de exemplu al tau sau unul mai simplu.PLS
Salut Beny,
Un exemplu de formular (HTML + cod PHP) a fost pus la urmatoarea pagina http://php.punctsivirgula.ro/aplicatii-formulare/ Tot aici mai sunt si cateva exemple de formulare implementate pe alte site-uri.
Astept comentarii daca ai nelamuriri!
Salut !
As fi recunoscator daca ai pune o lectie si despre cum sa facem site-ul public , sa poata fi vizualizat si de alti utilizatori , cum sa urcam o thema etc. ( imi pare rau ca am pus commentariul aici )
Adauga un comentariu la aceasta sectiune.
In codul acesta unde se pune fisierul unde va fi incarcat documentul...adica unde se va incarca documentul celui ce il uploadeaza?
Fisierul uploadat va fi pus in subfolderul 'upload', in aceeasi locatie cu scriptul upload.php. Spre exemplu, daca scriptul tau se afla in "C:\Program Files\EasyPHP5.3.0\www\", atunci, ca sa-ti functioneze upload-ul trebuie sa creezi un folder numit "upload" cu drepturi de scriere (atentie la Linux/Vista/Windows7 - folderul trebuie sa aiba permisiile corecte de scriere).
Asadar, fisierul uploadat se salveaze in "C:\Program Files\EasyPHP5.3.0\www\upload\"
Bineinteles, poti schimba asta din cod. Trebuie sa inlocuiesti calea din linia urmatoare:
$uploaddir = dirname( __FILE__ ). DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR;
Poti sa pui, spre exemplu:
$uploaddir = "D:\Uploads\Music\";
am easy php 3.0 si imi da eroare la:
<form enctype="multipart/form-data" action="upload.php" method="POST">
Scuze ca te deranjez atat dar mie imi da eroare la acel cod si cred ca este de la " <form "
off:cam cat timp imi ia sa invat php daca stau cam 1-2 h pe zi si daca eu fac o pagina php dar la fiecare chestie bagata in pagina ma uit pe niste notite...inseamna ca stiu php sau nu? si php are legatura cu pascal?
Dude (Mihai) fii si tu mai serios si nu mai pune intrebari imbecile. Probabil ca esti la inceputul liceului, asa ca mai roaga profii sa te indrume.
Adauga un comentariu la aceasta sectiune.