functia basename

15
Functia basename Aceasta functie returneaza numele de baza al unui fisier sau director sub forma unui sir de caractere. Functia are doi parametri de tip sir de caractere. Primul parametru reprezinta o cale catre un fisier sau director, iar al doilea este optional si reprezinta sufixul fisierului. In continuare este prezentat un exemplu de utilizare a acestei functii: $cale= "c:\\test.html"; echo "Numele fisierului cu sufix:<BR>"; echo basename ($cale) ."<BR>"; echo "Nurrlele fisierului fara sufix : <BR>" ; echo basename($cale,".html") ; Functia dirname Aceasta functie returneaza numele directorului parinte al unui fisier sau director sub forma unui sir de caractere. Functia are un singur parametru de tip sir de caractere care reprezinta o cale catre un fisier sau director. In continuare este un exemplu de utilizare a acestei functii: $cale = "c:\\test.html"; echo "Directorul parinte pentru "; echo $cale." este ".dirname ($cale) ; Functia pathinfo Aceasta functie se foloseste pentru a afia informatii referitoare la o cale catre un fisier sau director. Functia pathinfo primeste ca parametru un sir de caractere care reprezinta calea catre un fisier sau director. Functia returneaza un tablou ale carui valori sunt de tipul sir de caractere si care contine elementele " dirname ", "basename" si "extension". Elementele "dirname" si "basename" au valori identice cu cele returnate de functiile cu aelasi nume, iar elementul " extension " contine extensia fisierului. Exemplu: $cale = "c:\\test.html"; $info = pathinfo ($cale) ; echo "Informatii despre $cale:<BR>"; echo "Director: "; echo $info["dirname"] ."<BR>"; echo "Nume fisier: "; echo $info["basename"] ."<BR>"; echo "Extensie: "; echo $info["extension"] ."<BR>"; Functia file_exists Aceasta functie se foloseste pentru a determina daca un fisier exista sau nu pe disc. Functia file_exists are un singur parametru de tip sir de caractere care reprezinta numele fisierului pentru care se verifica existenta fizica pe disc. Functia returneaza valoarea logiea TRUE in caz de succes si valoarea logica FALSE in caz de esec. Aceasta functie nu poate fi folosita pentru fisiere afiate la distanta decat daca sunt partajate de pe o platforma Microsoft Windows pe care a fost configurata componenta File and Print Sharing sau daca sunt partajate pe o platforma *nix pe care a fost instalat pachetul Samba. Functia copy Aceasta functie se foloseste pentru a copia un fisier si are doi parametri de tip sir de caractere. Primul dintre acestia reprezinta numele fisierului sursa si cel de-al doilea reprezinta numele fisierului destinatie. Functia returneaza valoarea logica TRUE in caz de succes si valoarea logica FALSE in caz de esec. Functia rename Aceasta functie se foloseste pentru a redenumi un fisier si are doi parametri de tip sir de caractere. Primul parametru reprezinta numele fisierului si cel de-al doilea reprezinta noul numele al acestuia. Functia returneaza valoarea logica TRUE in caz de succes si valoarea logica FALSE in caz de esec.

Upload: roxana-sarbu

Post on 01-Jan-2016

7 views

Category:

Documents


0 download

DESCRIPTION

Functia basename

TRANSCRIPT

Page 1: Functia basename

Functia basenameAceasta functie returneaza numele de baza al unui fisier sau director sub forma unui sir de caractere. Functia are doi parametri de tip sir de caractere. Primul parametru reprezinta o cale catre un fisier sau director, iar al doilea este optional si reprezinta sufixul fisierului. In continuare este prezentat un exemplu de utilizare a acestei functii:$cale= "c:\\test.html";echo "Numele fisierului cu sufix:<BR>"; echo basename ($cale) ."<BR>";echo "Nurrlele fisierului fara sufix : <BR>" ; echo basename($cale,".html") ;Functia dirnameAceasta functie returneaza numele directorului parinte al unui fisier sau director sub forma unui sir de caractere. Functia are un singur parametru de tip sir de caractere care reprezinta o cale catre un fisier sau director. In continuare este un exemplu de utilizare a acestei functii:$cale = "c:\\test.html";echo "Directorul parinte pentru "; echo $cale." este ".dirname ($cale) ; Functia pathinfoAceasta functie se foloseste pentru a afia informatii referitoare la o cale catre un fisier sau director. Functia pathinfo primeste ca parametru un sir de caractere care reprezinta calea catre un fisier sau director. Functia returneaza un tablou ale carui valori sunt de tipul sir de caractere si care contine elementele " dirname ", "basename" si "extension". Elementele "dirname" si "basename" au valori identice cu cele returnate de functiile cu aelasi nume, iar elementul " extension " contine extensia fisierului. Exemplu: $cale = "c:\\test.html"; $info = pathinfo ($cale) ;echo "Informatii despre $cale:<BR>"; echo "Director: ";echo $info["dirname"] ."<BR>";echo "Nume fisier: ";echo $info["basename"] ."<BR>";echo "Extensie: ";echo $info["extension"] ."<BR>";Functia file_existsAceasta functie se foloseste pentru a determina daca un fisier exista sau nu pe disc. Functia file_exists are un singur parametru de tip sir de caractere care reprezinta numele fisierului pentru care se verifica existenta fizica pe disc. Functia returneaza valoarea logiea TRUE in caz de succes si valoarea logica FALSE in caz de esec. Aceasta functie nu poate fi folosita pentru fisiere afiate la distanta decat daca sunt partajate de pe o platforma Microsoft Windows pe care a fost configurata componenta File and Print Sharing sau daca sunt partajate pe o platforma *nix pe care a fost instalat pachetul Samba.Functia copyAceasta functie se foloseste pentru a copia un fisier si are doi parametri de tip sir de caractere. Primul dintre acestia reprezinta numele fisierului sursa si cel de-al doilea reprezinta numele fisierului destinatie. Functia returneaza valoarea logica TRUE in caz de succes si valoarea logica FALSE in caz de esec.Functia renameAceasta functie se foloseste pentru a redenumi un fisier si are doi parametri de tip sir de caractere. Primul parametru reprezinta numele fisierului si cel de-al doilea reprezinta noul numele al acestuia. Functia returneaza valoarea logica TRUE in caz de succes si valoarea logica FALSE in caz de esec.

1. Obtinerea atributelor unui fisier

Privilegiile asociate unui fisier sau unui catalog determina operatiile pe care le poate executa un utilizator cu fisierul sau catalogul respectiv.Pentru a adauga un fisier intr-un director, folosind PHP, trebuie sa aveti permisiunea de scriere in acel director, de asemenea, pentru a adauga date intr-un fisier, trebuie sa aveti permisiunea de scriere in fisierul respectiv.Aceste permisiuni sunt date (configurate) de administratorul sistemului respectiv.PHP furnizeaza numeroase functii care va permit sa obtineti informatii care descriu un fisier. Tabelul urmator rezuma cele mai cunoscute dintre aceste functii.

Functii PHP pentru obtinerea atributelor unui fisier

Page 2: Functia basename

Functie Descriere

file_exists()- Returneaza TRUE daca fisierul specificat exista, respectiv FALSE în caz

contrar

fileatime() - Returneaza timpul de acces la fisier sub forma de amprenta de timp UNIX.

filectime()- Returneaza timpul de modificare al i-nodului (structura de date care contine

informatii despre fisiere UNIX - N. T.) sub forma de amprenta de timp UNIX.

filegroup() - Returneaza identificatorul numeric al grupului care detine fisierul

filemtime()- Returneaza momentul de timp al modificarii fisierului sub forma de

amprenta de timp UNIX

fileowner() - Returneaza identificatorul numeric de utilizator al fisierului

fileperms() - Returneaza permisiunile fisierului

filesize() - Returneaza dimensiunea fisierului, în octeti

filetype()- Returneaza tipul fisierului, în speta "fifo", "char", "dir", "block", "link",

"file" sau "unknown"

is_dir()- Returneaza TRUE daca directorul specificat exista; în caz contrar,

returneaza FALSE

is_file()- Returneaza TRUE daca fisierul specificat exista; în caz contrar, returneaza

FALSE

is_readable()- Returneaza TRUE daca fisierul specificat exista si poate fi citit; în caz

contrar, returneaza FALSE

is_writable()- Returneaza TRUE daca fisierul specificat exista si se poate scrie în acel

fisier; în caz contrar, returneaza FALSEFunctiile fileowner() si filegroup() returneaza fiecare un identificator numeric; puteti converti identificatorul numeric într-un sir prin invocarea functiei posix_getpwuid() cu un identificator de utilizator, respectiv a functiei posix_getgrgid() cu un identificat de grup. Acestea returneaza informatii despre identificatorul precizat.Iata un exemplu in care puteti vedea, si intelege mai bine, cum sunt folosite functiile rezentate in tabelul anterior (fisierul 'test.txt' care va fi folosit de functii se afla in acelasi director cu scriptul php): <?php$filename = "test.txt";

$result = file_exists($filename);echo "<br /> file_exists(): $result";

$result = fileowner($filename);echo "<br /> fileowner(): $result";

$result = filegroup($filename);echo "<br /> filegroup(): $result";

$result = filetype($filename);echo "<br /> filetype(): $result";

$result = filesize($filename);echo "<br /> filesize(): $result";

$result = fileatime($filename);$result = date("m/d/Y H:i", $result);echo "<br /> fileatime(): $result";

$result = filectime($filename);$result = date("m/d/Y H:i", $result);

Page 3: Functia basename

echo "<br /> filectime(): $result";

$result = filemtime($filename);$result = date("m/d/Y H:i", $result);echo "<br /> filemtime(): $result";

$result = fileperms($filename);$result = decoct($result);echo "<br /> fileperms(): $result";

$result = is_file($filename);echo "<br /> is_file(): $result";

$result = is_dir($filename);echo "<br /> is_dir(): $result";

$result = is_readable($filename);echo "<br /> is_readable(): $result";$result = is_writable($filename);echo "<br /> is_writable(): $result";?> Datele de iesire ale exemplului sunt urmatoarele file_exists(): 1fileowner(): 0filegroup(): 0filetype(): filefilesize(): 5fileatime(): 08/28/2008 00:00filectime(): 08/28/2008 10:49filemtime(): 08/28/2008 11:32fileperms(): 100666is_file(): 1is_dir():is_readable(): 1is_writable(): 1

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina -> Functii pentru fisiere si directoare.

2. Privilegii de fisier

Privilegiile asociate unui fisier (sau director) determina operatiile pe care utilizatorii le pot efectua cu fisierul (sau directorul) respectiv. =Privilegiile sunt date sub forma a trei grupuri alcatuite din câte trei caractere fiecare; cu alte cuvinte, trei triade. Prima triada indica privilegiile acordate posesorului fisierului. Cea de-a doua triada indica privilegiile acordate membrilor grupului posesor al fisierului. Cea de-a treia triada indica privilegiile acordate altor utilizatori.Cele 3 caractere care alcatuiesc un grup sunt reprezentate, in sistemele UNIX, prin urmatoarele tri litere: 'r', 'w' si 'x'; acestea reprezinta:

r - fisierul poate fi cititw - se poate scrie în fisierx - continutul fisierului poate fi executat

Caracterele unei triade apar întotdeauna în secventa 'rwx'. Daca o anumita litera este înlocuita de o cratima (-), privilegiul asociat nu este accesibil.De exemplu, sa examinam privilegiile specificate in urmatorul exemplu:

rwxr-xr--

Aceste caractere au urmatoarea semnificatie:

"rwx", posesorul fisierului poate citi, scrie sau executa fisierul

Page 4: Functia basename

"r-x", membrii grupului posesor al fisierului pot citi sau executa fisierul, dar nu pot scrie în fisier

"r--", alti utilizatori pot citi fisierul, dar nu pot scrie în fisier sau executa continutul fisierului

Privilegiul 'x' este semnificativ numai pentru fisierele care includ un continut executabil, cum sunt fisierele binare executabile (.exe) sau anumite categorii de scripturi.

Posesorul unui fisier poate modifica privilegiile asociate fisierului emitând comanda chmod (aceasta functioneaza in sistemele de operare UNIX).Aceasta comanda are doua forme. O forma va permite sa specificati privilegiile folosind cifre scrise în octal; cealalta va permite sa le specificati folosind litere.Pentru a specifica privilegiile folosind cifre în octal, calculati valoarea numerica a fiecarei triade. Pentru aceasta, însumati numerele corespunzatoare fiecarui privilegiu disponibil din cadrul triadei. Numerele asociate privilegiilor sunt urmatoarele:

r - 4w - 2x - 1

De exemplu, privilegiul "rwx" are valoarea 4 + 2 + 1 = 7. Similar, privilegiul "r-x" are valoarea 4 + l = 5, iar privilegiul "r--" are valoarea 4.Dupa ce ati calculat valoarea numerica a fiecarei triade, formati un numar din trei cifre scris în octal, care este alcatuit din valoarea numerica a privilegiilor utilizatorilor, valoarea numerica a privilegiilor membrilor grupului, si valoarea numerica a privilegiilor altor utilizatori. Astfel, privilegiile "rwxr-xr--" corespund valorii în octal 754.

3. Modificarea privilegiilor unui fisier

Pentru a modifica privilegiile unui fisier, folositi functia chmod(), care are urmatoarea forma:

chmod(nume_fisier, mod)

Argumentul 'nume_fisier' specifica numele si calea de acces a fisierului ale carui privilegii urmeaza a fi modificate, iar argumentul 'mod' specifica privilegiile dorite, în general, se prefera exprimarea privilegiilor sub forma unui numar scris în octal. Pentru aceasta, prefixati valoarea folosind cifra 0. De exemplu, puteti atribui unui fisier "text.txt" privilegiile "rwxr-xr--" specificând pentru 'mod' valoarea 0754, functia "chmod" va fi chmod("text.txt", 0754)Pentru ca functia chmod() sa se execute cu succes, PHP trebuie sa ruleze sub contul utilizatorului posesor al fisierului. Functia returneaza TRUE în caz de reusita, respectiv FALSE în caz contrar.Pentru a modifica grupul posesor al unui fisier, invocari functia chgrp(), care are forma:

chgrp("nume_fifier", grup)

- Unde "grup" este un nume sau numar care desemneaza grupul respectiv.

Functiile chmod() si chgrp() nu functioneaza sub Microsoft Windows.

4. Deschiderea unui fisier

Inainte de a putea citi sau scrie într-un fisier, trebuie sa deschideti fisierul folosind functia fopen().

fopen("nume_fisier", "mod")

- unde 'nume_fisier' specifica numele si calea spre fisierul care urmeaza a fi deschis, iar 'mod' indica tipul de acces dorit.Modurile de deschidere a unui fisier sunt urmatoarele:

r - Permite doar citirea fisieruluir+ - Citire sau scriere de la inceputul fisieruluiw - Creaza fisierul daca nu exista si suprascrie datele existentew+ - Citire sau scriere; la scriere , creeaza fisierul daca nu exista si suprascrie

Page 5: Functia basename

datele existentea - Adaugare; Creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existenta+ - Citire sau scriere; la scriere, creaza fisierul daca nu exista si adauga datele noi la sfarsitul fisierului existentx - Doar scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta existax+ - Citire sau scriere; Creaza fisierul daca nu exista si genereaza un averisment daca acesta existab - Deschide fisierul in mod binar

Functia fopen() returneaza FALSE daca PHP nu a reusit sa deschida fisierul, în caz contrar, returneaza o valoare care contine un întreg, numit "identificator de fisier", care se foloseste pentru identificarea unui fisier de catre functiile care executa operatii cu fisiere.De exemplu, instructiunea urmatoare deschide fisierul 'carte.txt' pentru citire:

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

Sub Microsoft Windows, fisierele ASCII si fisierele binare sunt tratate în mod diferit. Când deschideti un fisier binar sub Windows, specificati "b" ca al doilea caracter al modului; de exemplu, "rb" pentru citire, "wb" pentru scriere, "a+b" pentru citire si adaugare. Daca nu procedati astfel, citirile din fisier si alte operatii se vor încheia prematur sau vor esua.

5. Verificarea finalizarii unei operatii cu un fisier

Operatiile cu fisiere (inclusiv cele legate de deschiderea, citirea unui fisier si scrierea într-un fisier) pot esua dintr-o varietate de motive. Deci, este important sa verificati daca fiecare operatie s-a încheiat cu succes. Iata o modalitate în care puteti proceda:

<?php$fh = fopen("carte.txt", "rb");if (!$fh) { echo "Nu a fost deschis fisierul carte.txt.";}?> Functia fopen() returneaza FALSE daca nu reuseste sa deschida fisierul. In acest caz, scriptul executa instructiunea echo care afisaza un mesaj.O forma alternativa mai simpla foloseste operatorul OR (SAU): <?php($fh = fopen("carte.txt", "rb")) OR die("Nu a fost deschis fisierul carte.txt.");?>

6. Inchiderea unui fisier

Un fisier deschis consuma resursele sistemului. Când un script a terminat de utilizat un fisier, scriptul trebuie sa închida fisierul, eliberând aceste resurse. La sfârsitul unui script, PHP închide în mod automat fisierele deschise. Totusi, la programare se recomanda sa închideti fisierele mai rapid, ori de câte ori este posibil.Pentru a închide un fisier, folositi functia fclose():

fclose(identificator_fisier)

- 'identificator_fisier' este identificatorul fisierului, returnat la deschiderea acestuia cu functia fopen()Iata un exemplu caracteristic de deschidere, utilizare si închidere a unui fisier: <?php$fh = fopen("carte.txt", "rb");if (!$fh) { echo "Nu a fost deschis fisierul carte.txt.";}// Aici se insereaza instructiunile care folosesc fisierul deschisfclose($fh);?>

Page 6: Functia basename

Functia fclose() returneaza valoarea TRUE daca fisierul a fost închis cu succes. Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea multe dupa ce s-a ratat o încercare de a închide un fisier.

Lucrul cu fisiere (2)

Învatati sa cititi datele dintr-un fisier Învatati sa afisati continutul unui fisier Învatati sa scrieti date intr-un fisier

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); }?>

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

Page 7: Functia basename

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 "Fisieru carte.txt nu a putut fi deschis";}while (!feof($fh)) { $s = fgets($fh, 256); echo "<br /> Citeste : $s";}fclose($fh);?> - 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:

Page 8: Functia basename

$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); echo "<br /> Citeste : $s";}// Deruleaza la inceputul fisierului si reia redarea acestuiarewind($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:

Page 9: Functia basename

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:

<?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().

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina -> Functii pentru fisiere si directoare.- Lectia 18

Lucrul cu fisiere 1 <<-- Anterior ----------- Urmator -->> Lucrul cu fisiere 3

Curs realizat de MarPlo Lucrul cu fisiere (3)

Page 10: Functia basename

Invatati sa blocati si sa obtineti accesul exclusiv la un fisier Invatati sa copiati, sa redenumiti si sa stergeti un fisier Studiati un script PHP util pentru incarcarea de fisiere in server

1. Obtinerea accesului exclusiv la un fisier

Web-ul ridica o problema speciala pentru dezvoltatorii de programe, deoarece mai multi utilizatori pot avea acces simultan la un singur script PHP. Uneori, accesul simultan poate avea ca rezultat date incorecte. Pentru a vedea cum se poate produce aceasta, sa luam în considerare urmatorul script, care reprezinta un contor pentru numarul de deschideri a unei pagini.

<?php$contor = "ctr.txt";$fh = @fopen($contor, "r+b");if (!$fh) { echo "Nu a fost deschis fisierul ctr.txt.";}else { $s = fgets($fh, 7); $count = (int) $s; $count = $count + 1; rewind($fh); fwrite($fh, $count); echo "<br /> Nr. vizitari: $count"; fclose($fh);}?> Remarcati functiile pe care le foloseste scriptul pentru a executa operatiile cu fisiere. Programul deschide fisierul "ctr.txt" pentru citire si scriere, preia datele din acesta, care sunt un numar intreg, mareste acel numar cu o unitate, intoarce pointerul la inceputul fisierului "rewind" dupa care rescrie noul numar, afiseaza numarul si inchide fisierul.Secventa de cod descrisa mai sus poate creea probleme in cazul in care, de exemplu doi utilizatori diferiti acceseaza acelasi fisier, in acelasi timp, cand contoarul este, de exemplu, la numarul 100. Amandoi vor incrementa numarul 100 cu o unitate si va rescrie in fisierul "ctr.txt" 101; in final, contoarul va arata 101, in loc de 102 cum ar fi trebuit (deoarece au fost 2 vizitatori). Pentru a evita astfel de conflicte PHP pune la dispozitia utilizatorilor o metoda prin care se poate bloca accesul temporar la un fisier. Pe durata blocarii, un alt utilizator nu va mai putea scrie/citi din acest fisier. De aceea durata blocarii trebuie sa fie limitata.Functia care realizeaza blocarea este flock(), care are urmatoarea forma:

flock(identificator_fisier, operatie)

- Unde "identificator_fisier" este identificatorul de fisier returnat de functia fopen(). Argumentul "operatie" este o constanta sau o expresie care poate avea urmatoarele valori:

LOCK_SH - Blocare partajata in scopuri de citire LOCK_EX - Blocare exclusiva in scopuri de scriere LOCK_NB - Blocare fara fixare LOCK_UN - Eliminarea blocarii

Iata cum se foloseste procesul de blocare, vom folosi acelasi exemplu, contoarul de mai sus, de data aceasta imbunatatit.

<?php$contor = "ctr.txt";$fh = @fopen($contor, "r+b");if (!$fh) { echo "Nu a fost deschis fisierul ctr.txt.";}else { flock($fh, LOCK_EX); $s = fgets($fh, 7); $count = (int) $s; $count = $count + 1;

Page 11: Functia basename

rewind($fh); fwrite($fh, $count); flock($fh, LOCK_UN); echo "<br /> Nr. vizitari: $count" fclose($fh);}?> - De data aceasta scriptul blocheaza fisierul "ctr.txt" pe timpul citirii si scrierii acestuia, astfel încât accesul simultan sa nu cauzeze o numarare eronata.Blocare se face imediat dupa ce a fost deschis fisierul, cu "LOCK_EX", si se incheie imediat dupa rescrierea in fisier, prin deblocare acestuia "LOCK_UN".

2. Copierea unui fisier

O functie care faciliteaza copierea fisierelor, este copy(). Functia copy() are urmatoarea forma: copy (sursa, destinatiea)Unde "sursa" este numele si calea fisierului care urmeaza a fi copiat, iar "destinatie" este numele sau calea copiei.Functia returneaza TRUE daca operatia de copiere reuseste; în caz contrar, returneaza FALSE.Iata un exemplu în care este prezentat modul de utilizare a functiei copy():

<?php$ok = copy("test.txt", "test.txt.bak");if (!$ok) { echo "Copierea nu a reusit.";}?> Exemplul creeaza o copie a fisierului "test.txt", cu numele "test.txt.bak", in acelasi director.Functia copy() va suprascrie fisierul destinatie, daca acesta exista.

3. Modificarea numelui unui fisier

Functia care va permite sa modificati numele unui fisier este rename(), aceasta care are urmatoarea forma: rename(nume_vechi, nume_nou)Unde "nume_vechi" este numele si calea originala a fisierului, iar "nume_nou" este numele dorit.Functia returneaza TRUE daca operatia de modificare a numelui a reusit; în caz contrar, returneaza FALSE. Iata un exemplu de utilizare a functiei rename():

<?php$ok = rename("test.txt", "teste.dat");if (!$ok) { echo "Modificarea numelui nu a reusit.";}?> - Exemplu modifica numele fisierului "test.txt" in "teste.dat".

4. Stergerea unui fisier

Functia care va permite sa stergeti un fisier este unlink(), aceasta care are urmatoarea forma: unlink(nume_fisier)Unde "nume_fisier" este numele si calea fisierului care va fi sters.Functia returneaza TRUE daca operatia de stergere a reusit; în caz contrar, returneaza FALSE.Iata un exemplu de utilizare a functiei unlink():

<?php$ok = unlink("test.txt");if (!$ok) { echo "Stergerea fisierului nu a reusit.";}?>

Page 12: Functia basename

- Exemplu sterge fisierului "test.txt".

Retineti ca PHP trebuie sa aiba acces de scriere la catalogul în care se vor executa operatiile de copiere, redenumire sau stergere; în caz contrar, PHP nu va putea executa aceste operatii.

5. Incarcarea unui fisier in server

Pentru incarcarea unui fisier in server, se folosesc formulare HTML impreuna cu un script PHP de incarcare care foloseste functia move_uploaded_file() pentru operatia de upload.Pentru a crea un formular de încarcare, specificati ENCTYPE="multipart/form-data" în eticheta FORM si includeti un control de introducere a datelor cu atributul TYPE="FILE". Iata un exemplu de script PHP si formular HTML care incarca fisierele in server:

<?php if(isset($_POST['submit'])) { $uploadpath = "upload/"; // Modifica aici directorul de upload $uploadpath = $uploadpath . basename( $_FILES['fisier']['name']); if(move_uploaded_file($_FILES['fisier']['tmp_name'], $uploadpath)) { echo"Fisier: ". basename( $_FILES['fisier']['name']). " a fost incarcat"; } else { echo "Eroare la urcarea fisierului pe server, mai incerca o data!"; } } ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> Alege fisierul: <input type="file" name="fisier" /> <br /><input type="submit" name='submit' value="Trimite" /> </form>

- Când utilizatorul apasa pe butonul de "Trimite", scriptul PHP preia datele si va incarca fisierul dorit in server

- O lista cu mai multe functii utile in lucrul cu fisiere gasiti la pagina -> Functii pentru fisiere si directoare