Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Lucrul cu fisiere si cataloage in PHP
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
s1b5bs
<titlu>
Lucrul cu fisiere si cataloage</titlu>

<titlu>Scopuri</titlu>
• invatati modul de functionare a sistemului de fisiere UNIX
• invatati sa obtineti informatii despre fisiere si cataloage
• invatati sa cititi si sa scrieti fisiere
• invatati sa configurati permisiuni de fisiere si cataloage
• invatati sa incarcati, sa copiati, sa stergeti si sa modificati denumirea fisierelor
• invatati sa creati si sa stergeti cataloage
• invatati sa cititi cataloage si sa navigati in acestea
Acest modul explica facilitatile oferite de PHP pentru lucrul cu fisiere si cataloage. Fisierele si cataloagele va permit sa stocati date in server, astfel incat datele sa poata fi retinute si sa fie accesibile de catre mai multi utilizatori.

<titlu>Sistemul de fisiere UNIX</titlu>
Pentru a intelege cum trebuie utilizat limbajul PHP pentru a lucra cu fisiere si cataloage, trebuie sa intelegeti sistemul de fisiere UNIX. Acest fapt este valabil chiar daca folositi PHP sub Microsoft Windows, deoarece modelul folosit de PHP pentru lucrul cu fisiere si cataloage este bazat pe UNIX.
Aceasta sectiune explica sistemul de fisiere UNIX si modul de utilizare a comen¬zilor UNIX pentru lucrul cu fisiere si cataloage. Daca lucrati cu Microsoft Windows, in general comenzile date in aceasta sectiune nu vor functiona corect. Totusi, in mediul respectiv veti lucra cu fisiere si cataloage folosind cu precadere Windows Explorer, nu DOS. Deci probabil ca nu este necesar sa cunoasteti comenzile DOS similare comenzilor UNIX explicate in aceasta sectiune.
<sugestie>
Pentru a putea lucra cu fisiere si cataloage, trebuie sa deschideti sesiunea de lucru pe sistemul unde sunt rezidente acestea. Daca nu aveti acces la o consola locala, puteti avea acces la sistem prin intermediul Telnet sau SSH, doua protocoale Internet cu o larga utili¬zare. Pentru a afla care este modul de acces la fisierele si cataloagele unui sistem, apelati la administratorul sistemului respectiv. </sugestie>




<titlu>Lucrul cu fisiere UNIX</titlu>
Un fisier este o serie de octeti stocati pe o unitate de hard-disc, CD-ROM sau alt mediu. Fisierele primesc nume pentru a se putea face cu usurinta referire la acestea. Un nume de fisier UNIX poate avea o lungime aproape nelimitata si poate include aproape orice caracter. Totusi, se recomanda utilizarea unor nume de fisiere care fie suficient de scurte pentru a putea fi tastate cu usurinta si care sa includa numai caractere vizibile, care nu au nici o semnificatie speciala pentru interpretorul UNIX. Spre deosebire de numele de fisiere Microsoft Windows, numele de fisiere UNIX sunt sensibile la diferenta intre majuscule si minuscule; ca atare, a si A se refera la fisiere UNIX diferite. Pentru a evita problemele, mai ales atunci cand deplasati fisiere intre UNIX si Windows, trebuie sa folositi minuscule, cifre, puncte, caractere de subliniere si cratime in numele fisierelor; de asemenea, numele fisierelor trebuie sa inceapa cu o minuscula sau cu o cifra.

<remarca>
Un octet este aproximativ identic cu un caracter. Totusi, limbile (nu limbajele) care contin in alfabetul lor numeroase caractere pot necesita mai multi octeti pentru reprezentarea unui caracter. Deseori, aceasta diferenta este lipsita de importanta. </remarca>

<titlu>Vizualizarea informatiilor despre fisiere</titlu>
Pentru a vizualiza informatii care descriu un fisier, emiteti comanda

ls -l nume_fisier

unde nume_fisier este numele fisierului. Figura 11-1 prezinta datele de iesire caracteristice ale comenzii ls.
Datele de iesire includ urmatoarele campuri:
• Tipul fisierului si permisiuni: tipul fisierului si permisiunile de acces. Aceste caracteristici ale fisierului sunt descrise in sub-sectiunile intitulate „Tipuri de fisiere" si „Privilegii de fisier".
• Legaturi: numarul legaturilor hard asociate acestui fisier. Fiecare legatura hard stabileste un nume dupa care este cunoscut fisierul respectiv, in general, puteti ignora acest camp.
• Utilizator: Numele utilizatorului care este posesorul fisierului.
• Grup: Numele grupului care este posesorul fisierului.
• Dimensiunea fisierului: dimensiunea fisierului, exprimata in octeti.
• Data modificarii: data si ora ultimei modificari a fisierului. Daca fisierul nu a suferit modificari recente, vor fi afisate data si anul.
• Numele fisierului: numele atribuit fisierului.

<titlu>Vizualizarea unui fisier</titlu>
Pentru a vizualiza continutul unui fisier, emiteti comanda

more nume_fisier

unde nume_fisier este numele fisierului, in cazul in care fisierul contine mai multe linii decat poate accepta ecranul sau fereastra, comanda more afiseaza numai numa¬rul liniilor care se incadreaza in ecran, respectiv fereastra. Pentru a parcurge fisierul inainte, apasati pe tasta spatiu. Pentru a parcurge fisierul in sens invers, tastati litera b. Pentru a parasi comanda, tastati litera q.

<figura 11-1 Datele de iesire ale comenzii ls>

*continut
*explicatie

*-rw-r--r- *Tip si permisiuni

*l
*Legaturi

*root
*Utilizator

*root
*Grup

*86
*Dimensiunea fisierului

*mar 25 15:08
*Data modificarii

*networks.txt
*Numele fisierului

</figura 11-1>

<sugestie> Datele de iesire ale comenzii more vor fi inteligibile numai daca fisierul contine date in format ASCII. Pentru a vizualiza un fisier binar, puteti folosi comanda od. </sugestie>

<titlu>Editarea unui fisier</titlu>
UNIX accepta o varietate de editoare pe care le puteti folosi pentru a edita un fisier, intrebati-1 pe administratorul de sistem care sunt editoarele disponibile in sistemul dumneavoastra. Un editor preferat de numerosi incepatori este Pico, editor asociat cu popularul program client de e-mail Pine. Pico include documente de asistenta incorporate si este usor de invatat si utilizat. De asemenea, datorita aso¬cierii sale cu Pine, Pico se gaseste pe numeroase sisteme UNIX.
Pentru a edita un fisier folosind Pico, emiteti comanda

Pico nume_fisier

unde nume_fisier este numele fisierului pe care doriti sa-1 editati. Daca doriti sa creati un fisier nou, pur si simplu omiteti numele fisierului. Ecranul editorului Pico se prezinta ca pe pagina urmatoare.
Pico prezinta numeroase comenzi utile, afisandu-le in ultimele doua linii ale ecranului sau. Fiecare comanda este emisa mentinand apasata tasta CTRL si apasand o tasta literala. Pico noteaza aceasta conventie prin prefixarea literei care simbo¬lizeaza comanda cu un caracter de tip accent circumflex (^). Tabelul 11-1 descrie numeroase comenzi Pico utile.

<ecran>
192.168.1.0
192.168.2.0
192.168.3.0
10.0.1.0
10.0.2.0
10.1.0.0|
<optiuni> Get Help,exit, WriteOut ,Justify,read file, where is, prev pg, next pg, cut text, uncut text, cur pos, to spell</optiuni></ecran>

<titlu>Stergerea unui fisier</titlu>
Pentru a sterge un fisier, emiteti comanda

rm nume_fisier

unde nume_fisier este numele fisierului.

<Atentie>
Spre deosebire de Windows, UNIX nu salveaza, in general, fisierele sterse intr-un asa-zis „recipient de reciclare" (Recycle Bin). Ca atare, stergerea unui fisier UNIX este, in general, un act irevocabil.

<titlu>Copierea unui fisier</titlu>
Pentru a copia un fisier, emiteti comanda

cp fisier_vechi fisier_nou

<tabel 11-1 Comenzi utile ale editorului Pico>
*Comanda
*Descriere

*CTRL-C
*Afiseaza pozitia curenta a cursorului (numarul liniei si al coloanei)

*CTRL-G
*Afiseaza documentele de asistenta Pico.

*CTRL-J
*Aliniaza paragraful curent.

*CTRL-K
*Taie linia curenta.

*CTRL-O
*Scrie pe disc continutul bufferului de editare.

*CTRL-R
*Citeste un fisier in bufferul de editare.

*CTRL-T
*Lanseaza utilitarul de verificare ortografica al editorului Pico.

*CTRL-U
*Lipeste text.

*CTRL-V
*Deplaseaza textul inainte.

*CTRL-W
*Cauta text.

*CTRL-X
*Paraseste programul Pico. Programul va afisa un prompt daca bufferul editare nu a fost salvat.
*CTRL-Y
*Deplaseaza textul inapoi.
</tabel 11-1>

unde fisier_vechi este numele fisierului pe care doriti sa-1 copiati (fisierul sursa), iar fisier_nou este numele pe care doriti sa-1 repartizati copiei (fisierul destinatie). Comanda cp nu afecteaza fisierul sursa.
<Atentie>
In functie de configuratia unui sistem UNIX, este posibil ca prin comanda cp sa se suprascrie un fisier existent. Nu uitati sa evitati suprascrierea accidentala a unui fisier important. </Atentie>

<titlu>Modificarea numelui unui fisier</titlu>
Pentru a modifica numele unui fisier, emiteti comanda

mv fisier_vechi fisier_nou

unde fisier_vechi este numele curent al fisierului, iar fisier_nou este numele dorit.

<sugestie>
Unele sisteme UNIX interzic utilizatorilor sa modifice numele fisierului de la un dispozitiv sau partitie la alta. Pentru a afla care sunt restrictiile in vigoare in sistemul dumneavoastra, luati legatura cu administratorul de sistem.</sugestie>

<titlu>Tipurile fisierelor</titlu>
Figura 11-1 a prezentat datele de iesire caracteristice ale comenzii ls. Primul camp al datelor de iesire indica tipul fisierului si privilegiile asociate acestuia. Primul caracter al campului indica tipului fisierului. Intre valorile posibile se numara urmatoarele:
<tabel>
*Tip
*Descriere

* *Fisier normal

*b
* Fisier de dispozitiv, incapabil de transferuri in bloc

*d
*Catalog

*l
*Legatura simbolica

*p
*Canal denumit (fifo)

*s
*Soclu
</tabel>
Cele mai importante tipuri de fisiere sunt fisierul normal si catalogul. Celelalte tipuri de fisiere au destinatii care nu necesita atentia noastra imediata.

<titlu>Proprietatea asupra fisierelor</titlu>
Fiecare fisier are un cont de utilizator asociat, cunoscut sub numele de posesor al fisierului. Puteti determina posesorul unui fisier prin emiterea comenzii ls. Utilizatorul care creeaza un fisier devine posesorul fisierului. Cu toate acestea, un administrator de sistem poate atribui un fisier unui alt utilizator, prin emiterea comenzii chown.
Administratorii de sistem UNIX pot defini grupuri de utilizatori, sau pur si simplu grupuri, care reprezinta seturi de utilizatori. Un utilizator poate fi membru al unui numar oricat de mare de grupuri.

Fiecare fisier are un grup asociat, cunoscut sub numele de grupul posesor al fisie¬rului. Puteti determina grupul posesor al unui fisier prin emiterea comenzii ls. Unele sisteme UNIX configureaza in mod automat un grup privat asociat fiecarui utilizator. Pe asemenea sisteme, posesorul si grupul posesor al unui fisier au, in mod normal, acelasi nume.
Posesorul unui fisier poate atribui unui fisier un nou grup posesor prin emiterea comenzii chgrp, care are urmatoarea forma: chgrp grup nume_ fisier unde nume_fisier este numele fisierului, iar grup este numele grupului. In afara de calitatea de posesor al fisierului, utilizatorul care emite comanda trebuie sa fie un membru al grupului grup.

<titlu>Privilegii de fisier</titlu>
Privilegiile asociate unui fisier determina operatiile pe care utilizatorii le pot efectua cu fisierul respectiv. Puteti determina privilegiile asociate unui fisier prin emiterea comenzii ls. Asa cum se poate vedea in figura 11-1, primul camp din datele de iesire ale comenzii ls indica tipul si privilegiile unui fisier. Primul caracter al campului indica tipul fisierului; celelalte noua indica privilegiile.
Privilegiile sunt date sub forma a trei grupuri alcatuite din cate trei caractere fiecare; cu alte cuvinte, trei triade. Prima triada indica privilegiile acordate poseso¬rului fisierului. Cea de-a doua triada indica privilegiile acordate membrilor gru¬pului care este posesorul fisierului. Cea de-a treia triada indica privilegiile acordate altor utilizatori, cu alte cuvinte, persoanelor care nu sunt nici posesoare ale fisierului si nici nu sunt membre ale grupului care este posesorul fisierului. De exemplu, sa presupunem ca primul camp al datelor de iesire ale comenzilor ls se prezinta astfel:

-rwxr-xr--

Ignorand primul caracter, care reprezinta tipul fisierului, aceste date de iesire reflecta urmatoarele privilegii:
• posesor, rwx
• membru al grupului, r - x
• alte persoane, r- Fiecare caracter al unei triade de privilegii poate fi o litera sau o cratima. Literele au urmatoarele semnificatii:

• r, fisierul poate fi citit
• w, se poate scrie in fisier
• x, continutul fisierului poate fi executat

<remarca>
Privilegiul x este semnificativ numai pentru fisierele care includ un continut executabil, cum sunt fisierele binare executabile sau anumite categorii de scripturi.</remarca>

Caracterele unei triade apar intotdeauna in secventa rwx. Daca o anumita litera este inlocuita de o cratima, privilegiul asociat nu este utilizabil. De exemplu, sa examinam privilegiile specificate anterior:

-rwxr-xr--

Aceste caractere au urmatoarea semnificatie:
• rwx, posesorul fisierului poate citi, scrie sau executa fisierul
• r-x, membrii grupului posesor al fisierului pot citi sau executa fisierul, dar nu pot scrie in fisier
• r- -, alti utilizatori pot citi fisierul, dar nu pot scrie in fisier sau executa continutul fisierului
Posesorul unui fisier poate modifica privilegiile asociate fisierului emitand comanda chmod. Aceasta comanda are doua forme. O forma va permite sa speci¬ficati privilegiile folosind cifre scrise in octal; cealalta va permite sa le specificati folosind litere.

Pentru a specifica privilegiile folosind cifre in octal, calculati valoarea numerica a fiecarei triade. Pentru aceasta, insumati numerele corespunzatoare fiecarui privilegiu disponibil din cadrul triadei. Numerele asociate privilegiilor sunt urmatoarele:
<tabel>
*Privilegiu
*Valoare

*R
*4

*W
*2

*X
*1
</tabel>
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 in octal, care este alcatuit din valoarea numerica a privilegiilor utilizatorilor, valoarea numerica a privilegiilor membrilor grupului, respectiv valoarea numerica a privilegiilor altor utilizatori. De exemplu, privilegiile rwxr-xr-- corespund valorii in octal 754.
Forma comenzii chmod care foloseste cifre in octal este urmatoarea:

chmod mod nume_fisier

unde mod este numarul din trei cifre scris in octal care indica privilegiile, iar nume_fisier este numele fisierului caruia urmeaza a i se aplica privilegiile. De exem¬plu, pentru a acorda posesorului acces complet la fisierul test si pentru a acorda altor utilizatori numai acces de citire, emiteti comanda:

chmod 744 test
Majoritatea utilizatorilor gasesc mai comoda utilizarea acelei forme a comenzii chmod care le permite specificarea privilegiilor folosind litere. Aceasta forma alternativa va permite sa specificati privilegii, precum si sa adaugati sau sa extrageti privilegii dintr-un fisier. Iata sintaxa formei alternative:

chmod utilizatori operatie privilegii

intre argumentele comenzii nu sunt permise spatii. Argumentul utilizatori include intre una si trei dintre urmatoarele litere:
• u, care indica utilizatorul posesor al fisierului
• g, care indica pe membrii grupului posesor al fisierului
• o, care indica utilizatori altii decat posesorul si membrii grupului posesor
Argumentul operatie este unul din urmatoarele:
• =, care arata ca privilegiile specificate trebuie sa inlocuiasca privilegiile existente
• +, care arata ca privilegiile specificate trebuie extinse
• -, care arata ca privilegiile specificate trebuie retrase
Argumentul privilegii include intre una si trei din urmatoarele litere:
• r, fisierul poate fi citit
• w, in fisier este permisa scrierea
• x, continutul fisierului poate fi executat
Se pot specifica mai multi utilizatori, mai multe operatii si mai multe grupuri; fiecare specificatie trebuie separata de urmatoarea specificatie cu ajutorul unei virgule. De exemplu, iata o comanda care instituie privilegiile rwxr--r- - pentru fisierul test:

chmod u=rwx,g=r,o=r test

Iata o comanda care retrage privilegiile de scriere fiecarui utilizator, cu exceptia posesorului fisierului, respectiv adauga privilegiile de executare la privilegiile posesorului fisierului:

chmod u+x,go-w test

Aceasta comanda nu modifica nici privilegiile de citire si de scriere ale posesorului fisierului, nici privilegiile de citire si de executie ale celorlaltor utilizatori.

<remarca>

Sistemele UNIX furnizeaza un cont special de utilizator, denumit radacina (root) sau super-utilizator(superuser), care poate obtine acces la fisiere si le poate manipula fara nici un fel de restrictii. Administratorul unui sistem este, in general, singura persoana auto¬rizata sa utilizeze contul radacina.

<Sfatul specialistului>
Intrebare: Cand studiez datele de iesire ale comenzii ls, uneori mai apar si alte privilegii in afara de r, w si x. Care este semnificatia acestora?
Raspuns: Uneori, administratorii de sistem folosesc numeroase privilegii speciale. De exemplu, un privilegiu special, cunoscut sub numele de setuid, modifica temporar identitatea utilizatorului detinator al acestui privilegiu care ruleaza un fisier program. Asemenea privilegii speciale nu sunt, in general, folosite de programatorii aplicatiilor PHP. </Sfatul specialistului>

<titlu>Utilizarea cataloagelor UNIX</titlu>
Pentru a facilita lucrul cu fisiere, UNIX va permite sa le organizati in cataloage, in Microsoft Windows, cataloagele sunt cunoscute sub numele de dosare (folders). Un catalog poate contine alte cataloage, cunoscute sub numele de sub-cataloagele acestuia; catalogul are denumirea de catalog parinte al fiecaruia dintre sub-cataloagele sale. Cataloagele si sub-cataloagele unui sistem UNIX formeaza un singur arbore sau ierarhie. Catalogul amplasat cel mai sus in arbore este cunoscut sub numele de catalog radacina si se scrie folosind simbolul /. Toate celelalte cataloage sunt sub-cataloage ale catalogului radacina.
In mod caracteristic, catalogul radacina are sub-cataloage precum bin, sbin, home si tmp. Calea absoluta a unui catalog este lista cataloagelor (incepand de la catalogul radacina) care trebuie parcursa pentru a se ajunge la catalog. Fiecare catalog din lista este separat de catalogul urmator de un caracter slash orientat inainte (/). De exemplu, calea absoluta a sub-catalogului bin al catalogului radacina este /bin. In cazul in care catalogul /bin ar fi avut un sub-catalog denumit there, calea sa abso¬luta de acces ar fi /bin/there.*

<remarca>
Sistemele Microsoft Windows folosesc caractere slash orientate inapoi (\) pentru separarea componentelor unei cai. Cu toate acestea, versiunile pentru Windows ale limba¬jului PHP sunt capabile de a interpreta corect o cale specificata folosind caractere slash orientate inainte. Cu toate acestea, daca scrieti un program PHP care prelucreaza cai de acces in format Windows, retineti ca un caracter slash orientat inapoi care apare intr-un sir PHP poate fi interpretat ca fiind caracterul initial al unei secvente escape. Poate fi necesar sa inlocuiti fiecare caracter slash orientat inapoi cu o pereche de caractere slash orientate inapoi, pentru a impiedica limbajul PHP sa interpreteze sirul in mod eronat.
</remarca>
<nota>
*Joc de cuvinte, in limba engleza, numele catalogului bin si forma de participiu trecut a verbului to be (a fi), in speta been, se pronunta aproximativ asemanator. De aceea, expresia bin there se pronunta la fel cu been there, adica am fost acolo, in engleza americana. — N.T.</nota>

Si fisierele pot avea cai absolute. Un fisier numit donethat, rezident in catalogul /bin/there, va avea calea de acces absoluta /bin/there/donethat.*
In general, un utilizator UNIX are un catalog asociat, cunoscut sub numele de catalog de baza al utilizatorului; in mod caracteristic, un catalog de baza este un sub-catalog al catalogului /home. La orice moment de timp, un program sau un interpretor de comenzi are un catalog asociat, denumit catalog curent de lucru. Cand utilizator deschide sesiunea de lucru cu un sistem UNIX, catalogul de baza al utilizatorului este stabilit, in general, drept catalog curent de lucru al sesiunii.
Fisierele si sub-cataloagele pot fi desemnate relativ la catalogul curent de lucru, nu numai prin intermediul unei cai absolute. Aceasta forma de referire se numeste cale relativa. O cale relativa nu incepe niciodata cu un caracter slash, deoarece prin slash se intelege catalogul radacina.
De exemplu, sa presupunem ca /home/bill este catalogul curent de lucru. Fisier test din catalogul respectiv poate fi desemnat prin intermediul caii absolute /home/ bill/test sau prin calea relativa test. Evident, calea relativa este mult mai usor de tastat si, ca atare, este deseori preferata.
Din nou, sa presupunem ca /home/bill este catalogul curent de lucru, in continuare, sa presupunem ca acest catalog contine sub-catalogul arhiva, care include fisierul note-platite**. Fisierul poate fi desemnat cu ajutorul caii absolute /home/bill/arhiva/note-platite sau prin intermediul caii relative arhiva/note-platite.
Fiecare catalog are doua sub-cataloage speciale, denumite .si ... Sub-catalogul denumit . este un alias al catalogului insusi; sub-catalogul denumit .. este un alias catalogului parinte. Puteti folosi aceste sub-cataloage speciale pentru a forma cai relative. De exemplu, sa presupunem ca /home/bill este catalogul curent de lucru. Puteti face referire la fisierul /home/test sub forma ../test, deoarece simbolul .. se refera la /home, catalogul parinte al catalogului /home/bill.
<remarca>
Chiar daca un catalog radacina nu are nici un catalog parinte, contine totusi un catalog cu numele ... In aceasta situatie speciala, catalogul .. este un alias al catalogului radacina.</remarca>

<titlu>Determinarea si modificarea catalogului curent de lucru</titlu>
Pentru a determina catalogul curent de lucru, emiteti comanda:

pwd

<nota>
*Jocul de cuvinte continua... S-a format o expresie frecvent folosita in engleza americana, si anume been there, done that, cu sensul am fost acolo, am facut aia - N.T.
**Un alt joc de cuvinte. In limba engleza, forma contrasa a prenumelui autorului - in speta Bill- si traducerea termenului nota de plata - adica bill- se scriu si se pronunta absolut la fel.-N.T.</nota>

Pentru a inlocui catalogul curent de lucru, emiteti comanda:

cd cale

unde cale este o cale absoluta sau relativa, care precizeaza catalogul scontat.
<sugestie>
Majoritatea sistemelor UNIX incorporeaza calea asociata catalogului curent de lucru, sau cel putin o parte a acesteia, ca parte a promptului de comanda. Daca sistemul dumneavoastra nu procedeaza astfel, solicitati-l pe administratorul sistemului pentru a va ajuta sa-l configurati astfel incat sa prezinte aceasta caracteristica. Astfel, va va fi mai simplu sa cunoasteti in permanenta identitatea catalogului curent de lucru.</sugestie>

<titlu>Vizualizarea continutului catalogului</titlu>
Pentru a vizualiza numele fisierelor si ale cataloagelor stocate in catalogul curent de lucru, emiteti comanda

ls

Sau, daca doriti sa vizualizati numele fisierelor si ale cataloagelor incluse intr-un alt catalog, emiteti comanda

ls cale

unde cale este o cale absoluta sau relativa care precizeaza catalogul.
Pentru a vizualiza, alaturi de numele fisierelor si ale cataloagelor, si caracteristicile acestora, adaugati indicatorul -l la comanda ls:

ls -l

sau

ls -;l cale

In mod prestabilit, comanda ls nu afiseaza cataloagele sau fisierele al caror nume incepe cu un punct; se spune ca asemenea fisiere si cataloage sunt ascunse. Pentru a vizualiza fisierele si cataloagele ascunse si omoloagele lor vizibile, adaugati indica¬torul -a la comanda ls:

ls -a

sau

ls -;al cale

<remarca>
Comanda ls si alte comenzi care manipuleaza cataloage vor esua daca utilizatorul nu are privilegii adecvate pentru accesul la catalog. Vezi sub-sectiunea intitulata „Privilegii de catalog".</remarca>

<titlu>Crearea unui catalog</titlu>
Pentru a crea un catalog, emiteti comanda mkdir: mkdir cale

unde cale este o cale absoluta sau relativa care precizeaza catalogul ce urmeaza fi creat.

<titlu>Stergerea unui catalog</titlu>
Pentru a sterge un catalog, emiteti comanda rmdir:

rmdir cale

unde cale este o cale absoluta sau relativa, care precizeaza catalogul ce urmeaza a fi sters. Catalogul trebuie sa fie vid; in caz contrar, comanda va esua.

<titlu>Privilegii de catalog</titlu>
Ca si fisierele, cataloagele au privilegii asociate. Privilegiile unui catalog se noteaza folosind aceleasi litere care indica privilegiile fisierelor; cu toate acestea, literele au semnificatii oarecum diferite atunci cand se aplica asupra cataloagelor:
• r, catalogul poate fi citit; cu alte cuvinte, sub-cataloagele si fisierele pe care le contine pot fi afisate prin intermediul comenzii ls si a altor mijloace similare
• w, catalogul poate fi scris; cu alte cuvinte, sub-cataloagele si fisierele pe care le contine pot fi create in catalog si apoi sterse de acolo
• x, catalogul se poate folosi; cu alte cuvinte, sub-cataloagele si fisierele pe care le contine sunt accesibile

<Sfatul specialistului>
Intrebare: Stergerea unui catalog care contine mai multe sub-cataloage si fisiere este o operatie greoaie. Exista vreo moda¬litate mai simpla?
Raspuns: Pentru a sterge un catalog si intreg continutul sau, emiteti comanda rm -rf cale unde cale este o cale absoluta sau relativa, care precizeaza catalogul ce urmeaza a fi sters. Procedati cu mare atentie atunci cand folositi aceasta comanda, deoarece in general, cataloagele si fisierele sterse nu pot fi recuperate. </Sfatul specialistului>

Cand este executata cu argumentul -l, comanda ls indica privilegiile asociate , unui catalog. Utilizatorii cu privilegii adecvate pot modifica privilegiile asociate unui catalog. Pentru aceasta, folositi comanda chmod, care a fost descrisa anterior in acest modul.

<Test „la minut">
• Care este comanda UNIX ce se poate folosi pentru a vizualiza conti¬nutul unui fisier?
• Care este comanda UNIX ce se poate folosi pentru stergerea unui fisier?
• Care sunt operatiile permise posesorului unui fisier de catre setul de privilegii r-xr-----?
• Care este comanda UNIX care precizeaza catalogul curent de lucru?
</Test „la minut">

<titlu>Lucrul cu fisiere</titlu>
Aceasta sectiune se bazeaza pe notiunile fundamentale insusite in sectiunea anterioara, prezentand modul de lucru cu fisiere prin utilizarea limbajului PHP. Deoarece modelul sistemului de fisiere folosit in Microsoft Windows difera de modelul sistemului de fisiere folosit in UNIX, unele functii PHP nu functioneaza corect sub Windows. De asemenea, pentru a complica si mai mult lucrurile, versiunea PHP 4.02 a introdus unele modificari in ceea ce priveste modul de lucru al limbajului PHP cu fisierele si cataloagele. Deci, sectiunea de fata trateaza PHP versiunea 4.02 si versiunile ulterioare sub UNIX. Expunerea indica incompatibilitatile majore, dar trebuie sa stiti ca, daca folositi Windows sau o versiune ante¬rioara a limbajului PHP, veti descoperi ca unele exemple nu functioneaza asa cum ar trebui.

<titlu>Aspecte legate de proprietate si privilegii</titlu>
Desi numerosi programatori PHP folosesc fisiere pentru stocarea datelor, trebuie sa va ganditi bine inainte de a lua aceasta decizie. Stocarea datelor in fisiere poate duce la afectarea caracterului privat al informatiilor pe care le contin, respectiv la alterarea sau chiar distrugerea fisierelor.
Sa ne reamintim ca privilegiile asociate unui fisier sau unui catalog determina operatiile pe care le poate executa un utilizator cu fisierul sau catalogul respectiv. Cand PHP ruleaza, o face sub un cont de utilizator desemnat. Privilegiile asociate fisierului sau catalogului determina operatiile pe care PHP le poate executa.
Un administrator de sistem poate configura contul de utilizator sub care ruleaza PHP. Deseori, administratorii de sistem configureaza PHP astfel incat sa ruleze sub un cont special de utilizator, care are privilegii foarte limitate; frecvent, acest cont se numeste nobody (in traducere nimeni). Rularea PHP sub un cont cu privilegii limitate
<nota>
Raspunsuri la test:
• more
• rm
• read, execute
• pwd
</nota>

ii ajuta pe administratori sa protejeze PHP impotriva pericolelor la adresa securitati si este considerat un obicei bun.
Cu toate acestea, daca administratorul dumneavoastra de sistem a configurat PHP astfel incat sa ruleze sub un cont precum nobody, a pune fisierele dumneavoastra la dispozitia PHP devine o problema. O modalitate consta in a permite tuturor utilizatorilor sa aiba acces la fisiere. Daca doriti ca PHP sa poata citi fisie¬rele, aceasta metoda este acceptabila. Dar, daca fisierele contin informatii confidentiale sau daca doriti ca PHP sa poata scrie in fisiere, metoda nu este recomandata. Utilizarea acesteia poate duce la un acces neautorizat la informatiile confidentiale incluse in fisiere, respectiv la alterarea sau chiar la distrugerea fisierelor.
O alta metoda consta in a solicita administratorului dumneavoastra de sistem sa modifice proprietatea asupra fisierelor la care doriti ca PHP sa aiba acces. De exemplu, administratorul de sistem poate repartiza fisierele grupului nobody. Dum¬neavoastra, ca proprietar al fisierelor, puteti beneficia de privilegii complete, iar PHP poate avea privilegiile disponibile pentru membrii grupului. Totusi, aceasta metoda permite oricarui utilizator sa scrie un script PHP si sa obtina acces la fisier cu aceleasi privilegii ca si cele permise PHP. In general, si aceasta metoda se va dovedi nesatisfacatoare.
Cu exceptia cazurilor cand sunteti administrator de sistem si cand nici un utilizator neautorizat nu poate obtine acces la sistem, probabil ca nu veti reusi sa concepeti o metoda care sa va permita sa folositi fisiere pentru a stoca intr-o maniera sigura date confidentiale sau volatile fara a risca o compromitere a fisierelor sau chiar a sistemului insusi. O modalitate mai sigura de stocare a datelor confidentiale sau volatile consta in utilizarea unei baze de date. In general, fisierele constituie un mijloc adecvat numai pentru stocarea datelor publice, non-volatile, care vor fi accesibile sistemului PHP.

<titlu>Obtinerea atributelor unui fisier</titlu>

PHP furnizeaza numeroase functii care va permit sa obtineti informatii care descriu un fisier. Tabelul 11-2 rezuma cele mai cunoscute dintre aceste functii.
Functiile fileowner() si filegroup() returneaza fiecare un identificator numeric; puteti converti identificatorul numeric intr-un sir prin invocarea functiei posix_getpwuid() cu un identificator de utilizator, respectiv a functiei posix_getgrgid() cu un identificat de grup.

<tabel 11-1 Functii PHP pentru obtinerea atributelor unui fisier>
*Descriere
*Functie

*file_exists()
*Returneaza true daca fisierul specificat exista, respectiv false in 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, in octeti.

*filetype()
*Returneaza tipul fisierului, in speta "fifo", "char", "dir", "block", "link",
"file" sau "unknown".

*is_dir()
*Returneaza true daca fisierul specificat exista si este un catalog; in caz contrar, returneaza false.

*is_file()
*Returneaza true daca fisierul specificat exista si este un fisier obisnuit; in caz contrar, returneaza false.

*is_readable()
*Returneaza true daca fisierul specificat exista si poate fi citit; in caz contrar, returneaza false.

*is_writable()
*Returneaza true daca fisierul specificat exista si se poate scrie in acel fisier; in caz contrar, returneaza false.
</tabel 11-2>
Un exemplu care indica modul de invocare a acestor functii este rezident in situl Web al cartii (https://www.osborne.com), astfel incat sa puteti descarca si rula personal fisierul. Numele fisierului este attributes.php. Iata continutul fisierului:

<?php
$filename = „ test.txt”;

$result = file_exists($filename) echo „<BR>file_exists(): $result”;

$result = posix_getpwuid(fileowner ($filename));
$result = $resulta“name”i; echo “<BR>fileowner(): $result”;

$result = posix_getgrgid(filegroup ($filename));
$result = $resulta“name”i; 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); 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”;
?>

Daca rulati personal exemplul prezentat anterior, nu uitati sa modificati valoarea variabilei $filename(nume fisier), folosind numele unui fisier rezident in acelasi catalog ca si scriptul. Datele de iesire ale exemplului sunt asemanatoare celor prezentate in listingul urmator:

file_exists(): 1 fileowner(): nobody filegroup(): nobody filetype(): file filesize(): 0 fileatime() : 04/12/2005 10:04 filectime() : 04/12/2005 11:28 filemtime() : 04/12/2005 10:36 fileperms(): 100644 is_file(): 1 is_dir(): 0 is_readable(): 1 is_writable(): 0

<titlu>Modificarea privilegiilor unui fisier</titlu>
Pentru a modifica privilegiile unui fisier, invocati chmod(), o functie ale carei argumente sunt asemanatoare celor folosite in linia de comanda UNIX:

chmod(nume_fisier, mod)

Argumentul nume_fisier specifica numele sau calea de acces a fisierului ale carui privilegii urmeaza a fi modificate, iar argumentul mod specifica privilegiile dorite, in general, se prefera exprimarea privilegiilor sub forma unui numar scris in octal. Pentru aceasta, prefixati valoarea folosind cifra 0. De exemplu, valoarea literala 010 are valoarea 8, nu valoarea 10. Ca atare, puteti atribui unui fisier privilegiile rw- r- - - - - specificand valoarea 0640.

Pentru ca functia chmod() sa se execute cu succes, PHP trebuie sa ruleze sub contul utilizatorului posesor al fisierului. Functia returneaza true in caz de reusita, respectiv false in caz contrar.

<Atentie>
Functia chmod() nu functioneaza sub Microsoft Windows. </Atentie>

<titlu>Modificarea proprietatii asupra unui fisier</titlu>
Pentru a modifica grupul posesor al unui fisier, invocari functia chgrp(), care are forma:

chgrp(nume_fisier, grup)

unde nume_fisier este numele sau calea fisierului, iar grup este numele sau identifica¬torul numeric al grupului. Pentru ca functia sa se execute cu succes, contul de utilizator sub care ruleaza PHP trebuie sa fie posesor al fisierului si sa fie membru al grupului specificat prin argumentul grup. Functia returneaza true in caz de reusita, respectiv false in caz contrar.

<Atentie>
Functia chgrp() nu functioneaza sub Microsoft Windows. </Atentie>

<remarca>
Desi PHP include o functie chown() care modifica proprietatea asupra unui fisier, PHP trebuie sa ruleze folosind contul radacina pentru ca aceasta functie sa poata da rezultate. Deoarece acesta este un procedeu nesigur si rareori folosit, in general functia chown() nu este disponibila. </remarca>

<titlu>Deschiderea unui fisier</titlu>
Procesul de stabilire a accesului la un fisier se numeste deschiderea fisierului, inainte de a putea citi sau scrie intr-un fisier, trebuie sa deschideti fisierul folosind functia fopen():

fopen(nume_fisier, mod)

unde nume_fisier specifica numele sau calea spre fisierul care urmeaza a fi deschis, iar mod indica tipul de acces dorit. De exemplu, instructiunea urmatoare deschide fisierul o_carte.txt pentru citire:

$fh = fopen(„o_carte.txt”, „r”);

Observati ca functia fopen () returneaza o valoare. Aceasta valoare este false daca PHP nu a reusit sa deschida fisierul, in caz contrar, aceasta valoare contine un

intreg care se numeste identificator de fisier, care se foloseste pentru identificarea unui fisier de catre functiile care executa operatii cu fisiere. Uneori, aceasta valoare se numeste pointer de fisier. Cu toate acestea, termenul identificator de fisier este mai exact, deoarece notiunea de identificator face referire in mod corespunzator la o valoare intreaga, in timp ce termenul de pointer face referire la o adresa din memorie.
Tabelul 11-3 prezinta valorile argumentului mod care pot fi transmise functiei fopen(). Literele care desemneaza modurile corespund cuvintelor read (a citi), write (a scrie) si append (a atasa). Un mod ("r") permite accesul la citire. Doua moduri permit accesul la scriere (acestea sunt "w" si "a"). Trei moduri (cele care includ un semn +) permit ambele tipuri de acces. Unele moduri determina PHP sa incerce a crea fisierul, daca acesta nu exista. Doua moduri trunchiaza un fisier existent, adica sterg continutul fisierului, nu si fisierul in sine.

<Atentie>
Pentru ca functia fopen() sa se execute cu succes, PHP trebuie sa ruleze sub contul unui utilizator care dispune de suficiente privilegii pentru a executa operatiile indicate de modul respectiv. De exemplu, pentru a putea crea un fisier, PHP trebuie sa ruleze ca utilizator cu acces de scriere la catalogul in care urmeaza a fi creat fisierul. </Atentie>

Fiecare fisier are un pointer asociat, care indica amplasarea octetului din fisier unde se va produce urmatoarea operatie (citire sau scriere). Valoarea modului functiei fopen() determina valoarea initiala a pointerului de fisier. Sectiunea urma¬toare, „Navigarea intr-un fisier", explica modul de acces la pointerul de fisier si modul de manipulare a acestuia.

PHP furnizeaza o forma alternativa a functiei fopen(), care preia trei argumente:

fopen(nume_fisier, mod, cale)

<tabel 11-3 Moduri folosite cu functia fopen()>

*Mod
*Citire
*Scriere
*Creare
*Trunchiere
*Pointer

*"r"
*x
*
*
*
*inceput

*"r+"
*x
*x
*
*
*inceput

*"w"
*
*x
*x
*x
*inceput

*"w+"
*x
*x
*x
*x
*inceput

*"a"
*
*x
*x
*
*Sfarsit

*"a+"
*x
*x
*x
*
*Sfarsit

Daca argumentul cale are valoarea "1", PHP va cauta fisierul intr-un catalog special, denumit cale de includere. Administratorul PHP configureaza identitatea caii de includere. Daca specificati argumentul cale, argumentul nume_fisier trebuie sa fie alcatuit dintr-un nume de fisier sau o cale relativa, nu dintr-o cale absoluta.

<Atentie>
In mod prestabilit, PHP 4.04pl1 raporteaza ca este configurata calea de includere. Cu toate acestea, este necesara stabilirea manuala a valorii variabilei include_path din fisierul php.ini; in caz contrar, calea de includere nu va fi folosita. </Atentie>

<Atentie>
Sub Microsoft Windows, fisierele ASCII si fisierele binare sunt tratate in mod diferit. Cand deschideti un fisier binar sub Windows, specificati b ca al doilea caracter al modului; de exemplu, "rb". Daca nu procedati astfel, citirile din fisier si alte operatii se vor incheia prematur sau vor esua. </Atentie>

<titlu>Verificarea finalizarii unei operatii cu un fisier</titlu>
Operatiile cu fisiere - inclusiv cele legate de deschiderea, citirea unui fisier si scrierea intr-un fisier - pot esua dintr-o varietate de motive. Deci, este important sa verificati daca fiecare operatie s-a incheiat cu succes. Iata o modalitate in care puteti proceda:

$fh = fopen(„o_carte.txt”, „r”); if (!$fh)
A die(“Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S

Functia fopen() returneaza false daca nu reuseste sa deschida fisierul. In acest caz, scriptul invoca functia die () pentru a afisa un mesaj si pentru a-si incheia executia.
Cu mult mai compacte, dar si posibil mai derutante, sunt formele folosite de programatorii PHP cu experienta. De exemplu:

($fh = fopen(„o_carte.txt”, „r”))
|| die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);

Parantezele si utilizarea caracterelor spatiu alb contribuie la clarificarea acestei instructiuni. Instructiunea invoca functia fopen() si atribuie rezultatul variabilei $fh. Apoi, executa o operatie SAU logic (simbolizata prin operatorul 11) cu doi operanzi, in speta $fh si die(). Daca variabila $fh are valoarea true, rezultatul operatiei SAU logic va fi intotdeauna true; deci, in acest caz, PHP nu executa evaluarea celuilalt operand al operatiei SAU logic, adica invocarea functiei die(). Ca atare functia die() este executata numai daca variabila $fh are valoarea false, adica daca functia fopen () esueaza.
O forma alternativa mai simpla foloseste operatorul OR (SAU):

($fh = fopen(„o_carte.txt”, „r”))
OR die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);

Aceasta forma are acelasi principiu de functionare ca si forma anterioara. Totusi, operatorul SAU are o precedenta mai redusa decat operatorul 11, deci este posibila scrierea instructiunii cu un numar mai redus de paranteze.

<Sugestie>
Sa ne reamintim ca prin prefixarea, cu ajutorul caracterului @, a numelui unei functii invocate, limbajul PHP elimina avertismentele si alte mesaje generate in timpul executiei functiei. Daca testati cu sarguinta rezultatul fiecarei operatii cu fisiere, puteti elimina cu usurinta mesajele de eroare si implicit evitati amestecarea datelor de iesire ale scriptului dumneavoastra cu mesajele PHP, care in caz contrar pot deruta utilizatorul.</sugestie>

<titlu>Inchiderea unui fisier</titlu>
Un fisier deschis consuma resursele sistemului. Cand un script a terminat de utilizat un fisier, scriptul trebuie sa inchida fisierul, eliberand aceste resurse. La sfarsitul unui script, PHP inchide in mod automat fisierele deschise. Totusi, la programare se recomanda sa inchideti fisierele mai rapid, ori de cate ori este posibil.
Pentru a inchide un fisier, invocati functia fclose():

fclose(identificator_fisier)

unde identificator_fisier este identificatorul fisierului, returnat la deschiderea acestuia. De exemplu, iata un exemplu caracteristic de deschidere, utilizare si inchidere a unui fisier:

$fh =@fopen(„o_carte.txt”, „r”); if (!$fh)
A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S
// Aici se insereaza instructiunile care folosesc fisierul deschis @fclose($fh);

<Sugestie>
Functia fclose() returneaza valoarea true daca fisierul a fost inchis cu succes. Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea multe dupa ce s-a ratat o incercare de a inchide un fisier. </Sugestie>

<titlu>Citirea dintr-un fisier</titlu>
PHP furnizeaza o varietate de functii pentru citirea fisierelor. Prima 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 intalneste sfarsitul fisierului, PHP va returna mai putin de lungime octeti.

<Sugestie>
PHP include o functie conexa, denumita fgetc(), care citeste un octet din fisierul specificat. </Sugestie>

Iata un exemplu care prezinta modul de citire si de afisare a unui text dintr-un fisier:

$fh =@fopen(„o_carte.txt”, „r”); if (!$fh)

A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S
$s = fread($fh, 256); echo „<BR>Citeste: $s”; fclose($fh);

Exemplul citeste maximum 256 de octeti din fisier. Pentru a citi un numar mai mare sau mai mic de octeti, modificati valoarea argumentului lungime al functiei fread().

<Sugestie>
Daca doriti sa incercati personal acest exemplu, asigurati-va ca fisierul o_carte.txt se afla in acelasi catalog ca si scriptul dumneavoastra si ca PHP are permisiunea de a citi fisierul.</sugestie>

Pentru a citi si a afisa intregul continut al fisierului, folositi functia filesize() pentru a furniza valoarea argumentului lungime, astfel:

$nume_fisier = „o_carte.txt”;
$fh =@fopen($nume_fisier, „r”); if (!$fh)
A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S
$s = fread($fh, filesize($nume_fisier, „r”)); echo „<BR>Citeste: $s”; fclose($fh);

<titlu>Citirea unei linii de text</titlu>
O linie de text este o serie de caractere urmate de un caracter de terminare a liniei. 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)

Ca si in cazul functiei fread(), argumentul identificator_fisier este o valoare returnata de functia fopen(); cu toate acestea, argumentul lungime specifica numarul

maxim de octeti care vor fi cititi, minus o unitate, pentru a permite includerea caracte¬rului de terminare a liniei. Octetii cititi din fisier sunt returnati ca valoare de tip sir.
Iata un exemplu care prezinta modul de citire si de afisare a primei linii a unui fisier:

$fh =@fopen(„o_carte.txt”, „r”); if (!$fh)
A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S
$s = fgets($fh, 256); echo „<BR>Citeste: $s”; fclose($fh);

In exemplul anterior s-a presupus ca linia cea mai lunga a fisierului contine mai putin de 256 octeti. Pentru a permite lungimi de linie mai mari, pur si simplu modificati valoarea argumentului lungime al functiei fgets ().

<titlu>Citirea linie cu linie a unui intreg fisier</titlu>
In general, dintr-un fisier trebuie citit mai mult decat prima linie a acestuia. Pentru aceasta, un script trebuie sa dispuna de o modalitate de a determina momen¬tul cand fisierul a fost citit in totalitate. Functia feof() are chiar acest scop, returnand o valoare care arata daca s-a ajuns sau nu la sfarsitul 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 sfarsit; in caz contrar, returneaza false.
Iata cum se poate folosi functia feof() pentru a controla procesul de citire a unui intreg fisier, linie cu linie:

$fh =@fopen(„o_carte.txt”, „r”); if (!$fh)
A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);
S
$s = fgets($fh, 256);
while (!feof($fh))
A echo „<BR>Citeste: $s”;
$s = fgets($fh, 256);
S fclose($fh);

Instructiunea while asigura faptul ca functia fgets() este apelata in mod repetat, pana la citirea tuturor liniilor.
O modalitate mai simpla de a citi linie cu linie un intreg fisier consta in a folosi functia file(). Aceasta functie returneaza un tablou in care fiecare element contine

o linie a fisierului text specificat. Iata un exemplu care foloseste functia file() pentru a citi si pentru a afisa continutul unui fisier:

$tablou = file(„o_carte.txt); forech ($tablou as $s);
A echo „<BR>Citeste: $s”;
S

<atentie>
Aceasta metoda nu este adecvata pentru fisiere de foarte mari dimensiuni, deoarece in tablou este incarcat intregul continut al fisierului, ceea ce poate necesita o cantitate de memorie superioara celei disponibile. </atentie>

<titlu>Afisarea continutului unui fisier</titlu>
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(„o_carte.txt”, „r”); fpassthru($fh);

Dupa ce a afisat fisierul, functia il inchide automat.
Cealalta functie, readfile(), necesita numai numele sau calea fisierului:

readfile(„o_carte.txt”=;

<titlu>Navigarea printr-un fisier</titlu>
Asa cum s-a aratat anterior, 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 inceputul fisierului. Functia are urmatoarea forma:

rewind(identificator_fisier)

unde identificator_fisier este identificatorul de fisier returnat de functia fopen().

<remarca>
Nu puteti readuce pointerul unui fisier la inceputul propriu-zis al unui fisier daca fisierul a fost deschis pentru un acces de tip atasare, adica intr-unul din modurile 'a' sau 'a+'.</remarca>

Iata un exemplu care prezinta modul de utilizare a functiei rewind() pentru a afisa de doua ori continutul unui fisier:

$fh =@fopen(„o_carte.txt”, „r”); if (!$fh)
A die („Nu a fost deschis fisierul <I>o_carte.txt</I>.”);

S
$s = fgets($fh, 256);
while (!feof($fh))
A echo „<BR>\$s: $s”;
$s = fgets($fh, 256);
S
// Deruleaza la inceputul fisierului si reia redarea acestuia rewind($fh);
while (!feof($fh))
A echo „<BR>\$s: $s”;
$s = fgets($fh, 256);
S fclose($fh);

Daca se produce vreo eroare, functia rewind() returneaza zero.
Desi functia rewind() este utila in caz de nevoie, necesitatea de a readuce un pointer de fisier la inceputul fisierului nu este chiar atat de frecventa. Functia fseek() furnizeaza o mai mare flexibilitate, permitandu-va sa pozitionari pointerul de fisier astfel incat sa puteti citi sau scrie in 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 in octeti, in raport cu inceputul fisierului, in caz de reusita, functia fseek() returneaza 0; in caz contrar, returneaza -l .
O forma alternativa a functiei asigura un grad superior de flexibilitate:

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 in raport cu inceputul fisierului
• SEEK_CUR, care stabileste pozitia pointerului de fisier in raport cu valoarea curenta a pointerului
• SEEK_END, care stabileste pozitia pointerului de fisier relativ la sfarsitul fisierului
Valoarea argumentului offset poate fi pozitiva, negativa sau zero.
De exemplu, pentru a pozitiona pointerul cu 1000 de octeti inainte de sfarsitul fisierului, emiteti urmatorul apel de functie:

fseek($fh, -1000,SEEK_END)

unde $fh este identificatorul fisierului al carui pointer doriti sa-1 repozitionati.

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

ftell(identificator_fisier)

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

<titlu>Scrierea intr-un fisier</titlu>
Spre deosebire de varietatea de functii furnizate pentru citirea fisierelor, PHP ofera o singura functie pentru scrierea in fisiere, si anume fwrite(). Functia are urmatoarea forma:

fwrite(identificator_fisier, data)

unde identificator_fisier este identificatorul de fisier returnat de functia fopen(), iar data este o valoare sir care determina datele care urmeaza a fi scrise. Daca executia functiei reuseste, returneaza numarul octetilor scrisi; in caz contrar, retur¬neaza valoarea —l.
Iata un exemplu care prezinta modul de scriere a datelor intr-un fisier:

$fh =@fopen(„jurnal.txt”, „a”); if (!$fh)
A die („Nu a fost deschis fisierul <I>jurnal.txt</I>.”);
S
$ok = fwrite($fh, „Acestea sunt date bune.\n”); echo „<BR>Rezultatul scrierii: $ok”; fclose($fh);

Programul prezentat in exemplul anterior scrie in fisier o linie de text. Deoarece fisierul a fost deschis folosind modul "a", datele sunt atasate la fisier; cu alte cuvinte, datele sunt scrise dupa toate datele existente in fisier. Observati ca a fost scris si un caracter de terminare a liniei ("\n"), astfel incat fisierul sa poata fi citit linie cu linie la un moment de timp ulterior. Daca lucrati cu un fisier text, in general trebuie sa includeti un caracter de terminare a liniei la sfarsitul fiecarei linii scrise in fisier.
Programul din exemplu scrie in 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, inchideti fisierul prin apelarea functiei fclose().
PHP mai furnizeaza si o forma alternativa a functiei fwrite():

fwrite(identificator_fisier, data, lungime)

Aceasta forma include un al treilea argument, si anume lungime, care va permite sa specificati numarul maxim de octeti care vor fi scrisi.

<Sugestie>
Argumentul lungime al functiei fwrite() trebuie utilizat atunci cand se scrie in fisiere binare sub Microsoft Windows. De asemenea, Windows prefera secventa de terminare a liniei "\r\n". Atunci cand scrieti programe PHP pentru sisteme Windows, este de preferat sa folositi secventa Windows de terminare a liniei.
</sugestie>

<sugestie>
PHP dispune de o alta functie pentru scrierea fisierelor, in speta fputs(). Totusi, in afara de nume, fputs() este una si aceeasi functie cu fwrite(). Deci, practic, fputs() si fwrite() reprezinta una si aceeasi functie, cu nume diferite.
</sugestie>

<titlu>Proiect 11-1: Un contor pentru numarul de deschideri ale unei pagini</titlu>
In cadrul acestui proiect, veti construi un script care numara de cate ori s-a obtinut accesul la o anumita pagina Web.

<titlu>Scopurile proiectului</titlu>
• Prezentarea modului de citire si scriere a unui fisier folosind PHP
• Prezentarea modului de creare a unui contor utilizat intr-o pagina Web

<titlu>Pas cu pas</titlu>
1. Plasati urmatorul script PHP intr-un fisier denumit ctr.php si incarcati acest fisier in serverul dumneavoastra PHP:

<?php
$cfile = basename($PHP_SELF) . ".dat";
$fh = fopen($cfile, "r+"); if (!$fh)
A die("<BR>Nu a fost deschis fisierul <I>$cfile</I>.");
S
$s = fgets($fh, 6);
$count = (int) $s;
$count = $count + 1;
$count = str_pad($count, 6); rewind($fh); fwrite($fh, $count); echo "$count"; fclose($fh);
?>

2. Plasati urmatorul script PHP intr-un fisier numit ctr-test.php si incarcati acest fisier in serverul dumneavoastra, inserandu-l in acelasi catalog ca si fisierul ctr.php:

<HTML>
<HEAD>
<TITLE>ctr-test.php</TITLE>
</HEAD>
<BODY>
Aceasta pagina a fost deschisa de <B>

<?php include "ctr.php" ?>
</B> ori.
</BODY>
</HTML>

3. Creati fisierul ctr-test.php.dat in acelasi catalog care contine scripturile pe care le-ati incarcat. Puteti crea fisierul prin emiterea comenzii

touch ctr-test.php.dat

Asigurati-va ca PHP are acces de citire si de scriere la fisier. Daca nu stiti precis cum trebuie sa efectuati aceasta operatie, luati legatura cu administratorul dumneavoastra de sistem.
4. Alocati un timp studiului scriptului PHP ctr.php. Observati modul in care scriptul folo¬seste variabila PHP $PHP_SELF pentru a determina numele fisierului care o contine si apoi ataseaza particula .dat pentru a forma numele fisierului care contine contorul de pagina. De asemenea, remarcati functiile pe care le foloseste scriptul pentru a executa operatiile cu fisiere.
5. Alocati un timp studiului scriptului PHP ctr-test.php. Remarcati ca acest script este alcatuit mai ales din coduri HTML; in fisier apare o singura linie PHP. Instructiunea include determina limbajul PHP sa includa continutul fisierului ctr.php in fisierul ctr-test.php atunci cand este deschis acesta din urma.
6. Orientati un browser Web spre adresa URL a scriptului ctr-test.php. Browserul trebuie sa afiseze numarul de deschideri ale paginii. Prin reimprospatarea paginii se determina incrementarea contorului din pagina.

<titlu>Obtinerea accesului exclusiv la un fisier</titlu>
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 deteriorarea fisierului. Pentru a vedea cum se poate produce aceasta, sa luam in considerare procesul de acces si actualizare a contorului de pagini asociat unei pagini Web. Sa presupunem ca, initial, contorul paginii are valoarea 100. Acest proces implica urmatoarea succesiune de evenimente:
1. Deschide fisierul care contine valoarea contorului.
2. Citeste fisierul, obtinand valoarea curenta a contorului (100).
3. Incrementeaza contorul (101).
4. Scrie in fisier, stocand valoarea actualizata a contorului (101).
5. Inchide fisierul.
Acum, sa vedem ce se poate intampla daca doua procese obtin acces simultan la pagina Web si la contorul sau, astfel incat etapele celor doua procese se intrepatrund. Tabelul 11-4 prezinta rezultatul.

<tabel 11-4 Acces conflictual la un fisier>
Procesul nr. 1
1. Deschide fisierul care contine valoarea contorului.
2. Citeste


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta