Jump to content
Aplicatiile pentru functia de "Helper" pentru serverul de Minecraft sunt deschise !

[Php] Upload De Fisiere


Guest dizzy

Recommended Posts

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 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 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

Guest
This topic is now closed to further replies.
×
×
  • Create New...