Guest dizzy Posted December 20, 2011 Share Posted December 20, 2011 Aplicatie: sa se incarce un fisier de pe calculatorul personal pe un 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 fisieredirectivele 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 revizuiteatributul 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 uploadProgramatorul 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 contine 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"; } } } ?> Link to comment Share on other sites More sharing options...
Recommended Posts