Lucrul cu fisiere

postat acum 4 ani de Stefanescu Mihai in categorie PHP

Sistemul de fisiere reprezinta o structura arborescenta, in nodurile caruia se pot afla fisiere sau directoare. Se poate face referinta la un fisier prin calea catr el. O cale reprezinta succesiunea nodurilor pana la o anumita destinatie, separate de un caracter specific. Sintaxa unei cai difera si ea in functie de sistemul de operare:

  • Windows – exemplu: C:\xampp\htdocs\scriptul_meu\index.php
  • Linux – exemplu: /var/www/scriptul_meu/index.php

Din cauza acestor diferente PHP ne pune la dispozitie 2 constante predefinite ce se modifica automat in functie de sistemulde operare:

  • DIRECTORY_SEPARATOR – are ca valoare separatorul intre componentele unei cai (in unix /, iar in windows \)
  • PATH_SEPARATOR – separatorul intre mai multe cai consecutive (in unix :, ;in windows)

Caile pot fi de 2 feluri.

  •  absolute – exemplu: C:\xampp\htdocs\scirpturile_mele\index.php sau in unix /var/www/scripturile_mele/index.php
  • relative – exemplu: ..\..\functii.php in windows si in unix ../../functii.php

In acest articol am sa va invat 4 operatii importante cu fisiere:

  • Deschiderea unui fisier
  • Citirea unui fisier
  • Scrierea unui fisier
  • Inchiderea unui fisier

Deschiderea si Inchiderea fisierelor

PHP ne pune la dispozitie functia fopen() pentru a deschide un fisier. Aceasta functie primeste 2 argumente, numele fisierului si modul in care sa fie deschis.Mai jos am postat un tabel cu modurile posibile in care poate fi deschis un fisier:

Mod Operatii Plasare Pointer Descriere
r  Citire Inceputul Fisierului Daca fisierul nu exista se genereaza un warning.
r+  Citire+Scriere Inceputul Fisierului Daca fisierul nu exista se genereaza un warning.
w  Scriere  Inceputul Fisierului  Daca fisierul exista, este golit. Daca nu exista, se incearca crearea lui.
w+  Citire+Scriere  Inceputul Fisierului  Daca fisierul exista, este golit. Daca nu exista, se incearca crearea lui.
a  Adaugare(Scriere)  Sfarsitul Fisierului  Daca fisierul nu exista se incearca crearea lui.
a+  Adaugare(Citire+Scriere)  Sfarsitul Fisierului  Daca fisierul nu exista se incearca crearea lui.
x  Creare+Scriere  Inceputul Fisierului  Daca fisierul exista, fopen returneaza false si genereaza warning.Daca fisierul nu exista, este creat si deschis pentru scriere.
x+  Creare, citire+scriere  Inceputul Fisierului  Daca fisierul exista, fopen returneaza false si genereaza warning.Daca fisierul nu exista, este creat si deschis pentru scriere.

Dupa ce au fost facute schimbari intr-un fisier este important sa-l inchide folosind functia fclose(). Aceasta functie necesita un pointer ca si argument si returneaza true daca fisierul a fost inchis cu succes, sau false daca nu a fost inchis cu success.

O data ce un fisier a fost deschis folosind functia fopen() putem folosi functia fread() pentru a-i citi continutul. Aceasta functie necesita 2 argumente, pointerul fisierului si marimea acestuia in bytes.Marimea fisierului poate fi aflata folosind functia filesize(), care are nevoie de un singur argument, mai exact are nevoie de numele fisierului si va return marimea acestuia in bytes.Iata pasi de deschidere a unui fisier:

  1. Deschide fisierul folosind functia fopen()Afla marimea folosind functia filesize()Citeste continutul folosind functia fread()Inchide-l folosind functia fclose()

In urmatorul exemplu salvam continutul unui fisier text intr-o variabila si il afisam pe pagina noastra web.

$fisier = "/home/user/guest/fisier.txt";
$file = fopen( $fisier, "r" );
if( $file == false ){
   echo ( "Nu pot deschide fisierul" );
   exit();
}
$marime = filesize($fisier);
$continut = fread($file, $marime);

fclose( $file );

echo ( "Marime fisier : $marime bytes" );
echo ( "<pre>$continut</pre>" );

Scrierea Fisierelor

Un nou fisier poate fi creat sau poate fi adaugat text intr-un fisier folosind functia fwrite(). Aceasta functie primeste 2 argumente ce specifica fisierul si textul de adaugat.Optinal, putem pune si un al treilea argument ce specifica marimea fisierul. Daca este inclus si un al treilea argument scrierea se opreste cand se ajunge la marimea specificata.

Urmatorul exemplu creaza un nou fisier text si adauga un text in el. Dupa inchidere lui se va confirma existenta acestuia cu ajutorul functiei file_exist().

$fisier = "/home/user/guest/fisier_nou.txt";
$file = fopen( $fisier, "r" );
if( $file == false ){
   echo ( "Nu pot deschide fisierul" );
   exit();
}
fwrite( $file, "Un simplu text\n" );
fclose( $file );


if( file_exist( $fisier ) ){
   $filesize = filesize( $fisier );
   $msg = "Fisierul are numele: $fisier ";
   $msg .= "si are marimea de $filesize bytes";
   echo ($msg );
}else{
   echo ("Fisierul $fisier nu exista" );
}

 

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group
Acest articol a fost mutat de pe vechea platforma.
Pentru orice eroare aparuta la mutare va rog sa ma contactati!

Comentariu postate de jordan 13 la data de 14.05.2019
My husband and i were quite joyous that Louis could conclude his investigation via the ideas he gained from your own web site. It is now and again perplexing to simply find yourself giving freely secrets and techniques which usually many people might have been making money from. Therefore we consider we have got the writer to thank for this. These explanations you've made, the simple blog menu, the relationships your site make it possible to foster - it's everything spectacular, and it's assisting our son and us consider that this situation is fun, and that is extraordinarily fundamental. Many thanks for all the pieces!
Comentariu postate de minecraft download free pc la data de 14.05.2019
Good day! I know this is kinda off topic but I was wondering if you knew where I could get a captcha plugin for my comment form? I'm using the same blog platform as yours and I'm having difficulty finding one? Thanks a lot!
Comentariu postate de download minecraft free la data de 15.05.2019
Having read this I believed it was very enlightening. I appreciate you taking the time and effort to put this informative article together. I once again find myself personally spending a significant amount of time both reading and posting comments. But so what, it was still worthwhile!
Comentariu postate de free minecraft download la data de 17.05.2019
I have been exploring for a little bit for any high quality articles or blog posts on this kind of space . Exploring in Yahoo I ultimately stumbled upon this site. Studying this information So i am happy to show that I've an incredibly just right uncanny feeling I came upon exactly what I needed. I such a lot for sure will make sure to don?t omit this website and give it a glance on a relentless basis.
Comentariu postate de download minecraft la data de 17.05.2019
Oh my goodness! Amazing article dude! Many thanks, However I am going through difficulties with your RSS. I don't understand the reason why I am unable to join it. Is there anybody having similar RSS issues? Anyone who knows the solution can you kindly respond? Thanks!!