Curs Php-mysql

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

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

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

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care atribut specifica metoda HTTP de trimitere (GET, POST) a datelor din formular?
action method value
<form action="script.php" method="post"> ... </form>
Ce proprietate CSS adauga umbra la chenar?
background-image box-shadow border-radius
#id {
  background-color: #bbfeda;
  box-shadow: 11px 11px 5px #7878da;
}
Clic pe functia care elimina primul element dintr-un array?
pop() push() shift()
var fruits = ["mar", "cireasa", "banana"];
fruits.shift();
alert(fruits.length);           // 2
Indicati functia cu care se poate verifica daca un anumit modul e instalat in PHP.
function() filetype() extension_loaded()
if(extension_loaded("PDO") === true) echo "PDO este valabil."
Alegeti verbul auxiliar corect care trebuie in propozitia: " ... I listen to music?".
has have Can
 Can I listen to music?
- Pot asculta muzica?
Alegeti verbul corect care trebuie in propozitia: "Me ... las frutas dulces"
están gustan gusta
Me gustan las frutas dulces.
- Imi plac fructele dulci.
Lucru cu fisiere 2

Last accessed pages

  1. Subjunctivul trecut - imperfect 2 (149)
  2. Constante si tipuri de variabile (5636)
  3. Pronume directe si indirecte (952)
  4. Teste spaniola - Tests y ejercicios de Español - Gramática (27221)
  5. Paginare rezultate din Baza de date - Laravel tutorial (520)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (214)
  2. Gramatica limbii engleze - Prezentare Generala (178)
  3. Exercitii engleza - English Tests and exercises - Grammar (167)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (115)
  5. Coduri pt culori (110)