Curs de web design PHP - http://videotutoriale35.blogspot.ro/

Page 1

curs programare web

Lucrul cu fişiere în PHP Folosind PHP-ul se pot executa anumite operaţii asupra fişierelor aflate pe server cum ar fi: fopen() = deschide fişierul indicat fclose() = închide fişierul fread() = citeşte conţinutul fişierului fwrite() = scrie în fişier filesize() = indică dimensiunea fişierului Deschiderea fisierelor Sintaxa funcţiei fopen() este: fopen(param1, param2); param1 = fişierul, calea catre fişier sau adresa fişierului care va fi deschis param2 = modul în care va fi deschis fişierul, şi poate avea valorile: r = fişier deschis doar pentru citire r+ = fişier deschis doar pentru citire şi scriere w = fisier deschis doar pentru scriere w+ = fisier deschis pentru citire şi scriere iar dacă nu există fişierul îl creează a = fişier deschis pentru adăugare la sfârşit a+ = fisier deschis pentru adăugare la sfârşit iar dacă nu exista fisierul îl creează t = fişier deschis în mod text b = fişier deschis în mod binar sau combinaţii ale acestora. Citirea fişierelor Sintaxa funcţiei fread() este: $filename="proba.txt"; $handle=fopen($filename, "r"); $contents=fread($handle, filesize($filename)); variabila $handle va fi folosită ulterior şi în alte funcţii Scrierea în fişiere Sintaxa funcţiei fwrite() este: fwrite($handle, "continut ce va fi scris in fisier"); Verificarea drepturilor de acces asupra fişierului Sintaxa functiei is_writable este: is_writable($filename); returnează TRUE dacă se poate şi FALSE dacă nu se poate scrie în fişier Închiderea fişierului Sintaxa funcţiei fclose() este: fclose($handle); Folosind aceste funcţii de bază putem încerca câteva exemple simple. Exemplu: se verifică dreptul de scriere în fişier. Primul pas este crearea fişierului proba.txt apoi se verifică exemplul care va returna mesajul “Acces interzis scrierii in fisier”. Se modifică drepturile asupra


curs programare web fişierului conform Q5 din FAQ adăugând scrierea. Se verifică iar exemplul care va returna mesajul “Acces permis scrierii in fisier”. <?php $filename="proba.txt"; if(is_writable($filename)) { //se verifica dreptul de scriere in fisier echo "Acces permis scrierii in fisier"; } else { echo "Acces interzis scrierii in fisier"; } ?> Exemplu: adăugam exemplului anterior verificarea deschiderii fişierului. <?php $filename="proba.txt"; if(is_writable($filename)) { //se verifica dreptul de scriere in fisier if(!$handle=fopen($filename, 'a')) { //se verifica deschiderea fisierului echo "Fisierul <b>".$filename."</b> nu poate fi deschis"; exit; //se incheie executia scriptului } echo "Fisierul <b>".$filename."</b> poate fi deschis"; } else { echo "Acces interzis pentru scriere in fisier"; } ?> Exemplu: adăugăm exemplului anterior scrierea în fişier şi tipărirea conţinutului sau <?php $filename="proba.txt"; if(is_writable($filename)) { //se verifica dreptul de scriere in fisier if(!$handle=fopen($filename, 'a')) { //se verifica deschiderea fisierului echo "Fisierul <b>".$filename."</b> nu poate fi deschis"; exit; //se incheie executia scriptului } if(fwrite($handle, date("j-n-Y g:ia")."\r\n")===FALSE) { //testeaza daca se poate scrie in fisier die ("Nu se poate scrie in ".$filename.""); //iesire } fclose($handle); $matrice=file($filename); //se citeste continutul fisierului si se stocheaza intr-o matrice foreach ($matrice as $cheie =>$valoare) { echo $valoare."<br>"; //printeaza cate o valoare pe un rand } } else { echo "Acces interzis pentru scriere in fisier"; } ?>


curs programare web

1. Citirea dintr-un fisier PHP furnizeaza o varietate de functii pentru citirea fisierelor. Una dintre acestea este fread(), care are urmatoarea forma: fread(identificator_fisier, lungime) Argumentul 'identificator_fisier' este valoarea returnata de functia fopen(), iar argumentul 'lungime' specifica numarul maxim de octeti care vor fi cititi. Octetii cititi din fisier sunt returnati sub forma de valoare de tip sir. Daca operatia de citire întâlneste sfârsitul fisierului, PHP va returna mai putin de lungime octeti data. Iata un exemplu de citire si de afisare a unui text dintr-un fisier, folosind functia fopen() (Fisierul "carte.txt" folosit ca test in exemplele de mai jos trebuie sa se afle in acelasi director in care este si scriptul php): <?php $fh = @fopen("carte.txt", "rb"); if (!$fh) { echo "Nu a fost deschis fisierul carte.txt."; } else { $s = fread($fh, 256); echo "<br /> Citeste: $s"; fclose($fh); } ?> Exemplul citeste maximum 256 de octeti din fisier daca fisierul a fost deschis. - Am folosit caracterul @ in fata functiei "fopen()" pentru a impedica afisarea erorilor de la server in cazul cand fisierul nu poate fi deschis. Este deja functia "if()" care verifica si afiseaza mesaj in caz de nedeschidere a fisierului. Pentru a citi un numar mai mare sau mai mic de octeti, modificati valoarea argumentului lungime al functiei fread(). PHP include o functie conexa, denumita fgetc(), care citeste un octet din fisierul specificat. Pentru a citi si a afisa întregul continut al fisierului, puteti folosi functia filesize() pentru a furniza valoarea argumentului lungime, astfel: <?php $nume = "carte.txt"; $fh = @fopen($nume, "rb"); if (!$fh) { echo "Nu a fost deschis fisierul carte.txt."; } else { $l = filesize($nume); $s = fread($fh, $l); echo "<br /> Citeste: $s"; fclose($fh); } ?>


curs programare web

2. Citirea unei linii de text Se obisnuieste frecvent citirea linie cu linie a unui text dintr-un fisier. Functia fgets() citeste o linie dintr-un fisier; functia are urmatoarea forma: fgets(identificator_fisier, lungime) - Argumentul 'identificator_fisier' este o valoare returnata de functia fopen(); aici, argumentul 'lungime' specifica numarul maxim de octeti dintr-o linie care vor fi cititi, minus o unitate, pentru a permite includerea caracterului de terminare a liniei (acesta poate fi omis si va citi toata linia). Octetii cititi din fisier sunt returnati ca valoare de tip sir. Iata un exemplu care prezinta modul de citire si de afisare a primilor 125 octeti din prima linii a unui fisier : <?php $nume = "carte.txt"; $fh = @fopen($nume, "rb"); if (!$fh) { echo "Nu a fost deschis fisierul carte.txt."; } else { $s = fgets($fh, 126); echo "<br /> Citeste: $s"; fclose($fh); } ?> - In exemplul de mai sus, daca prima linie din fisierul "carte.txt" are mai mult de 125 de caractere, va afisa doar primele 125, daca are mai putin de 125 de caractere, va afisa doar caracterele care sunt incluse in prima linie.

3. Citirea linie cu linie a unui întreg fisier În general, dintr-un fisier trebuie citit mai mult decât prima linie a acestuia. Pentru aceasta, un script trebuie sa dispuna de o modalitate de a determina momentul când fisierul a fost citit în totalitate. Functia feof() are chiar acest scop, returnând o valoare care arata daca s-a ajuns sau nu la sfârsitul fisierului. Functia are urmatoarea forma: feof(identificator_fisier) Argumentul 'identificator_fisier' este valoarea returnata de functia fopen(). Functia feof() returneaza TRUE daca fisierul specificat este la sfârsit; în caz contrar, returneaza FALSE. Iata cum se poate folosi functia feof() pentru a controla procesul de citire a unui întreg fisier, linie cu linie: <?php $nume = "carte.txt"; $fh = @fopen($nume, "rb"); if (!$fh) { echo "Fisierul carte.txt nu a putut fi deschis"; } while (!feof($fh)) { $s = fgets($fh, 256); echo "<br /> Citeste : $s"; }fclose($fh); ?>


curs programare web - Instructiunea "while" asigura faptul ca functia fgets() este apelata în mod repetat, pâna la citirea tuturor liniilor. O alta modalitate simpla de a citi linie cu linie un întreg fisier consta în a folosi functia file(). Aceasta functie returneaza un tablou în care fiecare element contine o linie a fisierului specificat. Iata un exemplu care foloseste functia file() pentru a citi si pentru a afisa continutul unui fisier: <?php $tablou = file("carte.txt"); foreach ($tablou as $s) { echo "<br /> Citeste : $s"; } ?> Aceasta metoda nu este adecvata pentru fisiere de foarte mari dimensiuni, deoarece în tablou este încarcat întregul continut al fisierului, ceea ce poate necesita o cantitate de memorie superioara celei disponibile.

4. Afisarea continutului unui fisier PHP furnizeaza doua functii care faciliteaza afisarea continutului unui fisier. - Una dintre functii, fpassthru(), necesita un argument care specifica identificatorul fisierului care urmeaza sa fie afisat: •

$fh = fopen("carte.txt", "rb"); fpassthru($fh);

Dupa ce a afisat fisierul, functia îl închide automat. - Cealalta functie, readfile(), necesita numai numele sau calea fisierului: •

readfile("carte.txt");

5. Navigarea printr-un fisier Fiecare fisier are un pointer asociat care indica pozitia octetului unde se va produce urmatoarea operatie. Puteti folosi functia rewind() pentru a readuce pointerul la începutul fisierului. Functia are urmatoarea forma ('identificator_fisier' este identificatorul de fisier returnat de functia fopen()): rewind(identificator_fisier) Nu puteti readuce pointerul unui fisier la începutul propriu-zis al unui fisier daca fisierul a fost deschis pentru un acces de tip atasare, adica într-unul din modurile 'a' sau 'a+'. Iata un exemplu care prezinta modul de utilizare a functiei rewind() pentru a afisa de doua ori continutul unui fisier: <?php $nume = "carte.txt"; $fh = @fopen($nume, "rb"); if (!$fh) { echo "Fisieru carte.txt nu a putut fi deschis"; } while (!feof($fh)) { $s = fgets($fh, 256);


curs programare web echo "<br /> Citeste : $s"; } // Deruleaza la inceputul fisierului si reia redarea acestuia rewind($fh); while (!feof($fh)) { $s = fgets($fh, 256); echo "<br /> Citeste \$s : $s"; } fclose($fh); ?> Daca se produce vreo eroare, functia rewind() returneaza zero. Desi functia rewind() este utila în caz de nevoie, necesitatea de a readuce un pointer de fisier la începutul fisierului nu este chiar atât de frecventa. Functia fseek() furnizeaza o mai mare flexibilitate, permitându-va sa pozitionari pointerul de fisier astfel încât sa puteti citi sau scrie în orice punct al fisierului. Functia are doua forme, cea mai simpla fiind urmatoarea: fseek(identificator_fisier, offset) unde 'identificator_fisier' este identificatorul de fisier returnat de functia fopen(), iar 'offset' este pozitia dorita a pointerului de fisier, specificata în octeti, în raport cu începutul fisierului. In caz de reusita, functia fseek() returneaza 0; în caz contrar, returneaza -l . O forma alternativa a functiei asigura un grad superior de flexibilitate, avand urmatoarea forma: fseek(identificator_fisier, offset, baza) unde 'identificator_fisier' si 'offset' au semnificatiile definite anterior, iar 'baza' ia una ; dintre urmatoarele valori: • • •

SEEK_SET, care stabileste pozitia pointerului de fisier în raport cu începutul fisierului SEEK_CUR, care stabileste pozitia pointerului de fisier în raport cu valoarea curenta a pointerului SEEK_END, care stabileste pozitia pointerului de fisier relativ la sfârsitul fisierului

Valoarea argumentului 'offset' poate fi pozitiva, negativa sau zero. De exemplu, pentru a pozitiona pointerul cu 1000 de octeti înainte de sfârsitul fisierului, emiteti urmatorul apel de functie: •

fseek($fh, -1000, SEEK_END)

Pentru a obtine valoarea curenta a pointerului de fisier, folositi functia ftell(), care are urmatoarea forma: •

ftell(identificator_fisier)

Functia returneaza valoarea curenta a identificatorului de fisier, respectiv valoarea zero daca functia esueaza.

6. Scrierea într-un fisier Pentru a scrie intr-un fisier se foloseste functia fwrite(), aceasta are urmatoarea forma: fwrite(identificator_fisier, date); - Unde 'identificator_fisier' este identificatorul de fisier returnat de functia fopen(), iar 'date' este o valoare sir care determina datele care urmeaza a fi scrise. Daca executia functiei reuseste, returneaza numarul octetilor scrisi; în caz contrar, returneaza valoarea —l. Iata un exemplu care prezinta modul de scriere a datelor într-un fisier:


curs programare web <?php $nume = "carte.txt"; $fh = @fopen($nume, "ab"); if (!$fh) { echo "Nu a fost deschis fisierul carte.txt."; } else { $ok = fwrite($fh, "Acestea sunt datele adaugate \n"); echo "<br /> Rezultatul scris este: $ok"; fclose($fh); } ?> Acest script va avea urmatoarele date de iesire: Rezultatul scris este: 30 - Programul prezentat în exemplul anterior scrie în fisierul "carte.txt" o linie de text. Deoarece fisierul a fost deschis folosind modul "a", datele sunt atasate la fisier; cu alte cuvinte, datele sunt scrise la sfarsit, dupa toate datele existente în fisier. Observati ca a fost scris si un caracter de terminare a liniei ("\n"), astfel încât fisierul sa poata fi citit linie cu linie la un moment de timp ulterior. Daca lucrati cu un fisier text, în general e util sa includeti un caracter de terminare a liniei la sfârsitul fiecarei linii scrise în fisier. Programul din exemplu scrie în fisier o singura linie de text. Totusi, puteti scrie mai multe linii, daca doriti. Daca apelati functia fwrite() din interiorul unei bucle, aveti posibilitatea de a scrie mai multe linii. Dupa ce ati scris toate liniile de care aveti nevoie, închideti fisierul prin apelarea functiei fclose(). PHP mai furnizeaza si o forma alternativa a functiei fwrite(): •

fwrite(identificator_fisier, date, lungime);

Aceasta forma include un al treilea argument, si anume "lungime", care va permite sa specificati numarul maxim de octeti care vor fi scrisi. Argumentul "lungime" al functiei fwrite() trebuie utilizat atunci când se scrie în fisiere binare sub Microsoft Windows. Windows prefera secventa de terminare a liniei "\r\n". Atunci când scrieti programe PHP pentru sisteme Windows, este de preferat sa folositi secventa "\r\n" de terminare a liniei. - PHP dispune de o alta functie pentru scrierea fisierelor, fputs(). Totusi, în afara de nume, fputs() este similara cu functia fwrite().

Alte exemple cu fişiere în PHP: Exemplu care testează existenţa unui anumit fişier (introdus printr-un formular de către utilizator): <html> <head> </head> <body> <?php // daca formularul nu a fost inca trimis // afiseaza campul de introducere a numelui fisierului if (!isset($_POST['file'])) { ?>


curs programare web <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Adauga numele fisierului <input type="text" name="file"> </form> <?php } // procesare formular trimis else { // verifica existenta fisierului // afisare mesaj corespunzator if (file_exists($_POST['file'])) { echo 'Fisierul exista!'; } else { echo 'Fisierul nu exista!'; } } ?> </body> </html>

Alte funcţii pentru fişiere: is_dir() - întoarce true/false dacă parametrul furnizat este director. is_file() - întoarce true/false dacă parametrul furnizat este fişier. is_link() - întoarce true/false dacă parametrul furnizat este un link simbolic. is_executable() - întoarce true/false dacă parametrul furnizat este executabil. is_readable() - întoarce true/false dacă parametrul furnizat poate fi citit. is_writable() - întoarce true/false dacă parametrul furnizat poate fi scris. filesize() - returneaza dimensiunea fişierelor filemtime() - returnează ultima dată de modificare a fişierului filamtime() - returnează ultima dată de accesare a fişierului fileowner() - returnează numele creatorului fişierului filegroup() - returnează grupul din care face parte creatorul fişierului fileperms() - returnează permisiunile fişierului filetype() - returnează tipul fişierului


curs programare web Exemplu de utilizare a functiilor amintite: <html> <head> </head> <body> <?php /* daca formularul nu a fost trimis se afiseaza campul text */ if (!isset($_POST['file'])) { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> Adauga numele fisierului <input type="text" name="file"> </form> <?php } // procesare formular else { echo 'Fisierul: <b>'.$_POST['file'] .'</b><br />'; // verificare existenta si afisare mesaj corespunzator // if (file_exists($_POST['file'])) { // afiseaza dimensiunea echo 'Dimensiune: '.filesize($_POST['file']).' bytes<br />'; // afiseaza creator echo 'Creator: '.fileowner($_POST['file']).'<br />'; // afiseaza grupul echo 'Grup: '.filegroup($_POST['file']).'<br />'; // afiseaza permisii echo 'Permisii: '.fileperms($_POST['file']).'<br />'; // afiseaza tip echo 'Tip: '.filetype($_POST['file']).'<br />'; // afiseaza ultima accesare echo 'Ultima accesare: '.date('Y-m-d', fileatime($_POST['file'])).'<br />'; // afiseaza ultima modificare echo 'Ultima modificare: '.date('Y-m-d', filemtime($_POST['file'])).'<br />'; // testeaza daca este director if (is_dir($_POST['file'])) { echo 'Fisierul este director <br />'; } // testeaza daca este fisier if (is_file($_POST['file'])) { echo 'Fisierul este un fisier clasic <br />'; } // testeaza daca este link if (is_link($_POST['file'])) { echo 'Fisierul este un link simbolic <br />'; } // testeaza daca este executabil if (is_executable($_POST['file'])) { echo 'Fisierul este executabil <br />'; } // testeaza daca poate fi citit if (is_readable($_POST['file'])) { echo 'Fisierul poate fi citit <br />'; } // testeaza daca poate fi scris if (is_writable($_POST['file'])) { echo 'Fisierul poate fi scris <br />'; } } else { echo 'Fisierul nu exista! <br />'; } } ?> </body> </html>


curs programare web

Funcţii în PHP Funcţia este o secvenţă de cod ce poate fi utilizată de mai multe ori în interiorul marilor scripturi şi este prezentată în script prin declaraţia ei. Funcţia chemată (invocată) va conţine acelaşi număr de argumente ca în declaraţie. function f($arg_1,$arg_2, $arg_n) { echo "Exemplu.\n"; return $val; } unde: f este numele funcţiei $arg_1, $arg_2, ... , $arg_n sunt argumentele funcţiei $val este valoarea returnată de funcţie Exemplu: construim o funcţie care adună 2 variabile <?php function adunare($a,$b) { $suma=$a+$b; return $suma; } $rezultat=adunare(5,16); echo $rezultat; ?> Exemplu: o funcţie care generează un tabel <?php function tabel($lim) { echo "<table border=\"1\">\n"; for ($i=0; $i<=$lim; $i++) { echo "<tr><td>randul ".$i."</td></tr>\n"; } echo "</table>"; } tabel(9); //tabel cu 10 randuri ?>

Domeniul de vizibilitate a variabilelor poate fi global (sunt văzute în tot scriptul) sau local (sunt văzute doar de o funcţie). Exemple: <?php $a=14; # variabila $a este globala, este vazuta de tot scriptul PHP. function afis() { $a+=7; echo $a;}afis();?>


curs programare web <?php function afis() {

local $a=14; # variabila $a este locala, este vazuta doar de functia afis() $a+=7; echo $a;

} afis(); ?> Exemplu: <?php # functiile se declara folosind cuvantul cheie "function" urmat de numele functiei # numele functiei trebuie sa fie orice identificator valid (adica sa inceapa cu # litere sau cu caracterul _ ) si sa nu contina caractere speciale sau spatiu # dupa numele functiei se pun paranteze rotunde # corpul functiei (implementarea) trebuie incadrata in acolade function afisLuna() { $luni = array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); echo '<select>'; for( $i = 0; $i < 12; $i++ ) { # intrucat se cunosc nr de pasi, se foloseste structura repetitiva for echo "<option>{$luni[ $i ]}</option>\n"; } echo '</select>'; } # mai jos vom folosi functia pentru a afisa un drop-down cu lunile anului: echo 'Luna inceperii activitatii: '; afisLuna(); echo '<br /><br />Luna terminarii activitatii: '; afisLuna(); ?>


curs programare web

TEMĂ

1. Să se preia datele unor studenţi(nume, an, secţie, nr_boabe, medie) dintr-un fişier text şi să se afişeze într-un tabel. 2. Definiţi următoarele funcţii: de transformare a datei calendaristice în dată locală, de aflare a zilei, lunii şi anului şi de afişare numere reale cu 2 zecimale. Indicaţie: se va folosi funcţia number_format ( float $number [, int $decimals ] ) 3. Creaţi un fişier text în care să fie reţinute datele despre nişte cărţi preluate dintr-o matrice cu cheia denumirea cărţii şi valoarea nume autor+editură.


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.