Invata PHPcu punctsivirgula.ro

1.
2. Instalare PHP
3. Ce inseamna PHP?
4. Notiuni de baza
5. Variabile. Constante
6. Vectori globali. Constante magice
7. Operatori
8. Structuri repetitive
9. Aplicatii: repetitive
10. Operatii cu vectori
11. Operatii cu siruri
12. Data si timp
13. Functii in PHP
14. Formulare
15. GET vs. POST
16.
17. Upload de fisiere
18. Headere
19. Cookies
C O N T I N U T
Tutorial PHP in limba romana.

Explicatii, exemple si aplicatii in PHP pentru incepatori


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";
		}
	}
}
?>
Mihai a spus Unde se pune fisierul? - 23.11.2009

In codul acesta unde se pune fisierul unde va fi incarcat documentul...adica unde se va incarca documentul celui ce il uploadeaza?

Alexandru a spus Re: Unde se pune fisierul? - 23.11.2009

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\";

Mihai a spus Eroare - 23.11.2009

am easy php 3.0 si imi da eroare la:
<form enctype="multipart/form-data" action="upload.php" method="POST">

Mihai a spus Ma poti ajuta? - 23.11.2009

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?

iulian a spus esti la marina? - 08.02.2010

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.

 


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");
	}
}
?>
beny a spus cum se face un formular pt comentarii - 04.09.2009

Da si u un exemplu de formular de comentarii,de exemplu al tau sau unul mai simplu.PLS

Alexandru a spus Pentru Beny - 08.09.2009

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!

Etic a spus Intrebare - 10.11.2009

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.