Acasă / Console de jocuri / Cum se citește fișierul php. Crearea, citirea și scrierea fișierelor PHP. Adăugări și funcții PHP utile pentru a lucra cu un fișier deschis

Cum se citește fișierul php. Crearea, citirea și scrierea fișierelor PHP. Adăugări și funcții PHP utile pentru a lucra cu un fișier deschis

PHP a apărut mult mai târziu decât limbajele de programare și-au consolidat pozițiile și au formulat idei generale despre sintaxă, logică, variabile și alte obiecte de program. Fișierele și funcțiile pentru lucrul cu ele nu au făcut progrese și nici chiar problema codificării fișierelor, care a apărut din motive naturale, nu a condus la soluții radical noi.

Note generale

Principala activitate cu fișierele, oricare ar fi acestea, constă în deschidere, citire/scriere și închidere. Puteți folosi funcțiile de blocare/deblocare a accesului la un fișier în timp ce acesta este procesat, puteți seta poziția de citire/scriere în fișier - totul este la fel ca înainte, în trecutul îndepărtat.

Un punct important în PHP este abundența de funcții pentru lucrul cu fișiere și opțiuni pentru utilizarea acestora. În practică, este suficient să folosiți opțiuni simple, dar funcționale. Un fișier este, în primul rând, memoria programului. Puteți stoca informații în el. Scopul oricărui program, scopul oricărui site web este de a prezenta, procesa și asigura siguranța informațiilor.

Circumstanta esentiala

Anterior, cerința de compatibilitate, cel puțin de jos în sus, era de neclintit. Adică, un program odată scris într-o versiune a unui limbaj de programare este în mod ideal compilat/interpretat în versiunea următoare. În programarea modernă, acest lucru nu este cazul. Cerința de compatibilitate a structurilor sintactice ale unei limbi a devenit un lucru de istorie, iar lupta dintre stiluri și instrumente de programare și versiuni ale anumitor instrumente a devenit norma vieții lor.

Lucrul cu fișiere, precum și cu baze de date, este la fel de important ca și interfața site-ului. Primul ar trebui să fie construit în așa fel încât atunci când schimbați platforma, găzduirea sau versiunea lingvistică, să nu fie nevoie să schimbați codul site-ului. Interfața pentru lucrul cu fișierele trebuie să fie inclusă într-un script separat și să asigure compatibilitatea deplină, la fel cum designul site-ului trebuie să se adapteze în mod adecvat oricărui dispozitiv, browser și să ofere restul funcționalității site-ului cu aceleași capabilități.

Citește și schimbă-te

Se poate schimba un program în sine, adică se poate îmbunătăți un script? Până astăzi, această întrebare îi interesează pe mulți. Dar sarcina sună mult mai practică: Citirea PHP fișier PHP. Un dezvoltator nu poate rezolva întotdeauna o anumită problemă scriind un anumit cod. Uneori este necesar să-l schimbi atunci când un vizitator vine pe site și formulează o întrebare care nu a fost prevăzută în etapa de dezvoltare.

Ca și în toate celelalte cazuri, în primul rând trebuie să deschideți fișierul. Nu contează dacă acest fișier există sau nu. Dacă se știe că fișierul există (funcția file_exists() dă un răspuns pozitiv), funcția fopen() este folosită cu acces 'r', 'r+', 'a', 'a+'. Dacă fișierul nu există încă, atunci cu acces „a”, „a+”, „w”, „w+”. Rezultatul deschiderii unui fișier va fi descriptorul acestuia. Fișierul este închis cu funcția fclose().

Este convenabil să folosiți PHP pentru a citi un fișier într-o matrice atunci când nu este nevoie să îl procesați în momentul citirii.

dacă (fișier_există($fNume)) (

$aLines = fișier($fNume)

În această opțiune, fiecare linie a fișierului intră secvențial în elementul de matrice. Trebuie remarcat faptul că funcțiile file() sau file_get_contents() nu trebuie să deschidă fișierul și să-l închidă.

Când fișierul de intrare este prea mare și trebuie să găsiți doar puțină informație sau din alte motive, puteți utiliza PHP pentru a citi fișierul linie cu linie. PHP oferă posibilitatea de a face acest lucru cu funcțiile fgets() și fgetc().

$fvs = fopen($fNume, „r”)

în timp ce ((fals !== ($cLine = fgets($fvs, 2000)))) (

$cLines .="
" . $i . "). ". $cLine

Ambele opțiuni funcționează impecabil. Cu toate acestea, atunci când efectuați citirea PHP a unui fișier PHP pentru modificarea ulterioară, trebuie luate măsuri de precauție. Nu este întotdeauna posibil să se prevadă cum îl va folosi un vizitator în etapa de dezvoltare a site-ului. Este mai bine dacă scripturile sunt modificate în cadrul funcțiilor site-ului, iar controlul acestei modificări nu este disponibil pentru vizitator, inclusiv pentru administratorul de resurse.

Salvarea rezultatelor

Informațiile primite și actualizate sunt scrise în fișier de funcția fputs() linie cu linie sau de funcția file_put_contents() ca întreg.

$fName = $_SERVER[„DOCUMENT_ROOT”] . „/tmp/scData.php”

$fvs = fopen($fNume, „a”)

turmă ($fvs, LOCK_EX)

$cLine = „1 linie”. chr(10)

fputs($fvs, $cLine)

$cLine = "2 linii" . chr(10)

fputs($fvs, $cLine)

turmă ($fvs, LOCK_UN)

În opțiunea de înregistrare linie cu linie, puteți manipula datele în timpul procesului de înregistrare, în al doilea caz, șirul sau matricea scrisă este plasată în întregul fișier;

$fișier = " scData.php "

$cContents = file_get_contents($fișier)

// adăugarea unei intrări

$cContents .= „înregistrare nouă\n”

// scrieți fișierul înapoi

file_put_contents($fișier, $cContents)

Citirea și scrierea fișierelor PHP este ușoară și naturală. Cu toate acestea, este important de reținut: fiecare fișier are un nume, extensie și cale (dosar). Pentru ca un script PHP să poată citi și scrie fișiere, acest script trebuie să aibă drepturile corespunzătoare. Sunt expuse automat pe găzduire, dar în unele cazuri trebuie extinse.

În unele cazuri, poate fi de dorit să se verifice rezultatele prin efectuarea unui test de citire. Scrierea fișierelor PHP necesită acest lucru în timpul dezvoltării, dar în unele cazuri, în interesul securității sau fiabilității site-ului, verificarea înregistrării datelor este esențială.

O trăsătură caracteristică PHP, MySQL, JavaScript și în special browsere: permiterea în liniște a unor erori. „Nerecunoscut, neterminat...” - nu este o practică foarte bună în prima linie tehnologia de informație, dar acest lucru îi învață pe dezvoltatori să nu facă greșeli și să scrie cod curat, de înaltă calitate, ceea ce nu este rău.

PHP și lucrul cu documente reale

Citirea PHP a unui fișier PHP este cu siguranță de interes practic, dar acesta este domeniul programării. Utilizatorul și vizitatorul site-ului sunt interesați de informații cu caracter aplicativ, pe care este obișnuit să le vadă sub formă de tabele și documente, în special în formatele *.xlsx și *. fișiere docx. Acestea sunt fișiere în format MS Excel și MS Word.

Listele de mărfuri, prețuri, caracteristici sunt de obicei formate sub formă de tabele, deci citirea PHP Fișier Excel are o importanță semnificativă.

Bibliotecile PHPExcel și PHPWord au fost dezvoltate pentru a funcționa cu astfel de fișiere. Cu toate acestea, conținutul fișierelor *.xlsx și *.docx este prezentat în standardul OOXML, adică documentul real, ușor de înțeles este prezentat într-o arhivă zip. O arhivă Zip este un set de fișiere, inclusiv imagini, obiecte, formule și inserții din alte programe. Fișierele text aici sunt reprezentate prin descrieri sub formă de etichete. Citirea unui astfel de fișier nu este suficientă, trebuie să-l analizați pentru a obține conținutul și structura pentru utilizare și modificare.

Aceasta înseamnă că operația de citire se transformă într-o procedură de deschidere a arhivei. Aceste biblioteci deschid independent arhiva de documente și oferă dezvoltatorului funcții extinse pentru citirea, procesarea și scrierea unor astfel de documente.

tabele Excel

include_once „PhpOffice/PhpExcel/IOFactory.php”

funcția scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//Această matrice conține matrice de șiruri de caractere

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//prelucrare

foreach($aSheet->getRowIterator() ca $row)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator ca $celulă)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $element)

Citirea și procesarea fișierelor Excel este mult mai dificil de procesat Documente Word. Cea mai bună opțiune, dacă trebuie să implementați un proiect serios de citire și procesare a informațiilor aplicate, este să stăpânești mai întâi biblioteca PHPWord. Acest lucru vă va oferi o experiență bună și o înțelegere rapidă a specificului problemei.

Documente Word

Doar două rânduri:

$oWord = nou \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Documentul $cFileName este acum disponibil pentru procesare. În continuare, arhiva este deschisă, este selectat și analizat conținutul acesteia, care poate fi afișat pe site, modificat și rescris.

$zipClass = nou ZipArchive()

$zipClass->open($this->tempFileName)

// citește întregul conținut al documentului

pentru ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

dacă (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// fișierele cu extensiile „.xml” și „.xml.rels” sunt salvate în tabelul de documente

// fiecare linie xml este scrisă cu un număr unic în ordine

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// toate celelalte fișiere sunt scrise în folderul document așa cum sunt

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // conținut ca fișier

Posibilitățile oferite de PHP Excel și PHP Word vă permit să manipulați documente reale și să faceți conținutul acestora relevant în orice moment. În lumea dinamică de astăzi, acest lucru devine foarte important. Centrul de greutate s-a mutat de mult de la utilizarea locală a tehnologiei informatice la spațiul virtual de internet. Prin urmare, crearea de tabele și documente în produsele locale Microsoft este mai puțin eficientă decât lucrul cu astfel de documente în mod automat și semi-automat pe un site web, care este accesibil nu numai creatorului tabelului sau documentului, ci și consumatorilor acestuia.

Fișiere text, o altă viață

Într-o primă aproximare, fișierele text sunt mai simple decât fișierele PHP sau documentele aplicației. Cu toate acestea, este ceva de gândit aici. Operațiile de citire/scriere ale unor astfel de fișiere sunt deja indicate mai sus, dar semnificația unor astfel de fișiere este mult mai importantă.

Deoarece există un astfel de dat ca client și server (primul este dominat de JavaScript, al doilea de PHP), atunci nici mecanismele cookie și sesiunile nu pot face față nevoii de a transfera informații între scripturi, pagini și anumite procese.

Este posibil să reflectați modificările dorite în baza de date, dar cu toate avantajele și viteza lor, fișierele text temporare sau permanente pot fi o opțiune mult mai interesantă pentru transmiterea informațiilor. Dacă nu creați o mulțime de fișiere mici și nu le controlați dimensiunea, acestea pot fi o versiune specifică și mai flexibilă a unei baze de date.

Citirea PHP a unui fișier text este rapidă, acesta poate fi parsat imediat într-o structură, matrice sau obiect. Acesta din urmă este foarte important, deoarece vă permite să creați obiecte care trăiesc în afara timpului alocat Script PHP, care, după cum știți, poate exista doar pe server și numai în momentul în care pagina este încărcată, este generat un răspuns AJAX, sau dintr-un alt motiv care determină lansarea interpretului PHP.

Dacă te gândești la ce fișier text- acesta este conținutul și structura de la dezvoltator, fișierul PHP este sintaxa interpretului plus logica dezvoltatorului, iar descrierile „etichetate” html, css, xml sunt elemente mai semantice, dar reglementate de standarde statice. Se poate ajunge la concluzia că probabil este timpul ca fișierele să dobândească conținut nou, iar acest lucru ar trebui să determine calitatea și logica lor de utilizare. Tocmai pentru că programarea nu este încă pregătită pentru următoarea etapă a dezvoltării sale, fișierele rămân astăzi pur și simplu fișiere pe care dezvoltatorul le creează și determină utilizarea lor.

Cel mai interesant și promițător lucru este atunci când PHP citește un fișier PHP independent atunci când este nevoie. Iar o simplă citire PHP a unei linii dintr-un fișier are ca rezultat crearea unui obiect, cel puțin în starea în care a fost salvat. Acestea nu sunt idei în întregime familiare, dar în lumea modernă totul se schimbă atât de repede.

JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze!

Lucrul cu fișiere

Manipularea fișierelor este un instrument important al PHP.

Inclusiv fișiere externe

Puteți include un fișier în fiecare document PHP folosind instrucțiunea include(). Argumentul său este calea către fișier. Această instrucțiune este convenabilă de utilizat atunci când aveți bucăți identice de cod în multe programe PHP. Conținutul fișierului include este procesat ca text HTML simplu. Pentru ca conținutul acestui fișier să fie procesat ca program PHP, acesta trebuie să fie înconjurat de etichete de deschidere și de închidere PHP.

Exemplul 1

Folosind include() ...partea principală..."; ?>

Ecou"

... salutări generale...

"

REZULTAT EXEMPLULUI 1:

... salutări generale...

...partea principală...

ÎN în acest caz, rezultatul va fi același dacă fișierul include top.php conține doar o linie de text HTML:

... salutări generale...

Fișierele incluse pot returna valori precum funcții. Utilizarea instrucțiunii return încheie execuția acestui fișier în același mod ca și funcțiile.

Exemplul 2

Folosind o instrucțiune include() care returnează o valoare Fișierul include a returnat $res"; ?>

Includeți fișierul top.php cu programul PHP:

REZULTAT EXEMPLULUI 2:

Fișierul include a returnat 56

Instrucţiuni include() poate fi folosit în interiorul unei bucle. Într-o buclă include() este executat la fiecare iterație. Acesta poate fi folosit pentru a include mai multe fișiere. De exemplu:

Pentru ($i=1; $i<=5; $i++) include("incfile{$i}.htm");

Determinarea numelui fișierului include și încărcarea acestuia se repetă de fiecare dată când apelați include(). Aceasta înseamnă că, dacă conținutul fișierului include s-a modificat de la apelul anterior, noul conținut va fi încărcat.

Operator include() poate fi inclus și în corpul unei declarații condiționate.

Deși este asemănător ca aspect cu funcționarea, include() nu este o funcție, ci este un construct de limbaj special.

Pentru a indica faptul că fișierul trebuie inclus o singură dată, se folosește operatorul include_once().

Analiza dosarului

PHP conține multe funcții care oferă informații despre fișiere. Cele mai utilizate sunt:

  • fișier_există()- determină existenţa unui dosar. De exemplu: if (!file_exists("aaa.php")) echo "Atenție! Fișierul aaa.php nu a fost găsit!";
  • is_file()- determină dacă obiectul examinat este un fișier. De exemplu: if (is_file("bbb.txt")) echo "Poți fi sigur, bbb.txt este un fișier";
  • is_dir()- determină dacă obiectul examinat este un director. De exemplu: if (is_dir("/tmp")) echo "Într-adevăr, /tmp este un director";
  • este_citit()- determină dacă fișierul este lizibil. De exemplu: if (is_readable("db.dbf")) echo "db.dbf poate fi citit";
  • is_writable()- determină dacă fișierul poate fi scris. De exemplu: if (is_writable("db.dbf")) echo "Puteți scrie în db.dbf";
  • dimensiunea fișierului ()- determină dimensiunea fișierului în octeți.
  • filmtime()- determină data și ora la care fișierul a fost modificat ultima dată.
  • fileatime()- determină data și ora ultimului acces la fișier.

Exemplul 3

Informații despre fișier "; echo "$f - ".(is_dir($f) ? "" : "nu ")."
"; echo "$f ".(este_citit($f) ? "": "nu")."se poate citi
"; echo "$f ".(is_writable($f) ? "": "nu ")."
„; echo „dimensiunea lui $f în octeți este „.(dimensiunea fișierului($f)).”
"; echo "$f a fost modificat ultima dată - ".(data("d M Y H:i", ora fișierului ($f)))."
"; echo "ultimul apel la $f - ".(data("d M Y H:i", fileatime($f)))."
"; } ?>

REZULTAT EXEMPLULUI 3:

Top.php - fișierul top.php - nu este un director top.php poate fi citit. 20 octombrie 2005 14:01

Atenţie! Aceste funcții nu funcționează cu fișierele șterse. Ele pot fi aplicate numai sistemului de fișiere local.

Gestionarea fișierelor

PHP conține multe funcții de gestionare a fișierelor. Cele mai utilizate sunt:

  • atingere()- creează un fișier gol cu ​​numele dat. Dacă un astfel de fișier există deja, funcția va schimba data modificării. De exemplu: touch("ex1.txt");
  • copie()- copiază fișierul. Pentru a copia fișiere în PHP, utilizați funcția de copiere ($sursă, $rezultat). Trebuie doar să treacă doi parametri - sursa $sursă și numele fișierului de copiere - $rezultat. Este demn de remarcat faptul că ar trebui să indicați adresele complete ale fișierelor. Un exemplu de utilizare a funcției de copiere:

  • deconectați()- șterge fișierul specificat. De exemplu:
  • fopen()- deschide local sau fișier ștersși returnează un pointer către acesta. Pointerul este folosit în toate operațiunile asupra conținutului fișierului. Argumente: numele fișierului și modul de deschidere.
    rlectură. Indicatorul fișierului este setat la începutul fișierului
    r+citit si scris. Indicatorul fișierului este setat la începutul fișierului
    wînregistra. Indicatorul fișierului este setat la începutul fișierului. Se pierde tot conținutul vechi al fișierului. Dacă un fișier cu numele specificat nu există, funcția încearcă să-l creeze
    w+citit si scris. Indicatorul fișierului este setat la începutul fișierului. Se pierde tot conținutul vechi al fișierului. Dacă un fișier cu numele specificat nu există, funcția încearcă să-l creeze
    oînregistra. Indicatorul fișierului este setat la sfârșitul fișierului. Dacă un fișier cu numele specificat nu există, funcția încearcă să-l creeze
    a+citit si scris. Indicatorul fișierului este setat la sfârșitul fișierului. Dacă un fișier cu numele specificat nu există, funcția încearcă să-l creeze

    De exemplu:

    $fp = fopen("http://www.php.net/", "r"); // pentru citirea $fp = fopen("ex1.txt", "w"); // pentru înregistrarea $fp = fopen("ex2.txt", "a"); // pentru a adăuga la sfârșit

    Dacă nu puteți deschide fișierul, puteți întrerupe programul. De exemplu:

    $fp = fopen("ex1.txt", "w") sau die ("Eșuat la deschiderea fișierului");

  • fclose()- închide dosarul. Argument: Pointerul fișierului primit mai devreme de la funcția fopen(). De exemplu: fclose($fp);
  • feof()- verificarea finalului dosarului. Argument: indicator de fișier.
  • fgetc()- citirea următorului caracter din fișier. Argument: indicator de fișier.
  • fgets()- citirea următoarei rânduri a fișierului. Argumente: indicatorul fișierului și lungimea șirului de citit. Operația se încheie fie după ce numărul specificat de caractere a fost citit, fie când este detectat sfârșitul liniei sau al fișierului.

    Exemplul 4

    Citirea liniilor dintr-un fișier "; ?>
  • friad() - functia generala citind dintr-un fișier. Argumente: indicatorul fișierului și numărul de caractere de citit.
  • fseek()- indentarea de la începutul dosarului. Argumente: file pointer și offset.

    Exemplul 5

    Se afișează a doua jumătate a fișierului
  • fputs()- scrierea unei linii într-un fișier. Argumente: indicator de fișier și șir.
  • fwrite()- analog complet al funcției fputs().

    Exemplul 6

    Înregistrare și anexare la fișier
  • turmă()- blochează fișierul, adică împiedică alți utilizatori să citească sau să scrie în fișier până când persoana care deține lacătul a terminat de lucrat la fișier. Argumente: indicatorul fișierului și numărul modului de blocare.

    Exemplul 7

    Blocare fișier

    Blocare cu turmă() nu este absolută. Doar acele programe care folosesc și această funcție o vor ține cont.

Versiunea PHP >= 4.3.0 are noi funcții convenabile pentru lucrul cu fișiere:

  • file_get_contents()- citiți întregul fișier sau adresa URL
  • file_put_contents()- scrieți fișierul

Lucrul cu cataloage

PHP are mai multe funcții pentru a lucra cu directoare:

  • mkdir()- crearea unui catalog. Argumente: calea directorului și modul de acces. Modul de acces este un număr octal de trei cifre cu un zero la început. Primul număr este dreptul de acces pentru proprietar, al doilea este pentru grup, iar al treilea este pentru toți ceilalți. ÎN sistem Windows modul de acces este ignorat. Sistemul UNIX definește următoarele drepturi de acces:

    De exemplu, corect acces complet pentru proprietar, citiți și alergați pentru grup și alergați pentru toți ceilalți:

    Mkdir("testdir", 0751);

  • rmdir()- ștergerea unui director. Argument: calea directorului. Puteți șterge un director gol doar dacă aveți dreptul să faceți acest lucru. Dacă are succes, funcția returnează true.
  • opendir()- deschiderea unui director. Argument: calea directorului. Dacă apare o eroare, funcția returnează false. O eroare la deschidere poate fi cauzată de faptul că directorul nu există sau programul nu are permisiunea de a-l citi.
  • readdir()- citirea directorului. Argument: calea directorului. Returnează un șir care conține numele fișierului sau subdirectorului găsit. Când se ajunge la sfârșitul directorului, funcția returnează false.

    Exemplul 8

    Citirea unui director "; ?>

    Expresia de testare a buclei nu va funcționa conform așteptărilor dacă există un fișier numit „0” în director. În acest caz, numele „0” va fi convertit în 0, determinând terminarea buclei. Acest lucru poate fi evitat prin luarea unor măsuri de securitate suplimentare prin schimbarea expresiei de verificare:

    Gettype($f = readdir($dh)) != „boolean”

    Pe lângă utilizarea funcției fgetc() fgets() fgetss(), puteți folosi
    $fișier = fișier($nume fișier). Citește $filename în matrice ($file).

    Exemplu:

    $fișier=fișier($nume fișier); pentru ($i=0; $i<=count($file); $i++) { echo $file[$i], "
    "; }

Transferarea unui fișier de pe server. Descărcați fișierul. Descărcare.

Descărcare manuală sau cum să utilizați un script pentru a deschide o fereastră de salvare a fișierelor pentru utilizator. Pentru ca browserul să deschidă dialogul „Salvare fișier” cu numele fișierului file.dat, scriptul trebuie să trimită următoarele antete:

Antet("Conținut-Dispoziție: atașament; nume fișier=fișier.dat"); header("Content-Type: application/x-force-download; name=\"file.dat\"");

Un exemplu gata făcut de trimitere a unui fișier de pe disc:

Nu ar strica să faceți referire la script ca http://.../download.php?file.dat, altfel browserele bazate pe Mozilla ar putea încerca să scrie fișierul ca file.dat.php. sau specificați atributul de descărcare: Descărcare Nota: Nu utilizați antetul ("Cache-Control: no-cache") în astfel de scripturi, majoritatea versiunilor de Internet Explorer nu vor putea descărca fișierul;

Următorul exemplu de script demonstrează cum să organizezi asistența pentru descărcare:

Se presupune că $cd este calea fișierului, $fn este numele fișieruluiCum se transferă un fișier pe server?

Funcții pentru lucrul cu directoare

  • chdir() - Schimbă directorul
  • boolean chdir (string str)

    Schimbă directorul PHP curent cu cel specificat ca parametru str. Returnează TRUE la succes, FALSE la eroare

  • chroot() - Schimbă directorul rădăcină
  • chroot boolean (string str)

    Schimbă directorul rădăcină al procesului curent cu cel trecut ca parametru str. Returnează TRUE la succes, FALSE la eroare.

    Notă: Această funcție nu este implementată pentru platformele Windows.

  • closedir() - Eliberează un handle de director
  • void closedir (catalog de resurse)

    Închide fluxul asociat cu catalogul și transmis ca parametru de catalog. Înainte de a utiliza această funcție, fluxul trebuie deschis folosind funcția opendir().

    dir - Clasa director

class dir ( dir (șir str) șir cale resursă handle șir citit (void) void rewind (void) void close (void) )

Un mecanism orientat pe pseudo-obiect pentru citirea directorului trecut în parametrul directorului. Din momentul în care directorul este deschis, două proprietăți de clasă devin disponibile. Proprietatea „mâner” poate fi utilizată cu alte funcții de manipulare a directoarelor, cum ar fi funcțiile readdir(), rewinddir() și closedir(). Proprietatea „cale” conține calea către directorul deschis. Sunt disponibile trei metode: citire, derulare înapoi și închidere.

Vă rugăm să rețineți modul în care valoarea returnată a metodelor clasei dir() este verificată în exemplul de mai jos. Acest exemplu verifică valoarea identității (expresiile sunt identice atunci când sunt egale și de același tip - pentru mai multe informatii detaliate(vezi capitolul Operatori de comparare) valoarea FALSE, deoarece altfel, orice intrare de director al cărei nume poate fi exprimat ca FALSE va opri bucla.

Exemplu de cod:

mâner."
\n"; echo "Cale: ".$d->cale."
\n"; while (fals !== ($entry = $d->read())) ( echo $entry."
\n"; ) $d->close(); ?>

Notă: Ordinea în care metoda „citire” returnează intrările de director depinde de sistemul de operare.

Notă: De asemenea, PHP definește automat o clasă internă numită Director, ceea ce înseamnă că nu veți putea să vă definiți propriile clase cu același nume.


  • getcwd() - Obține numele directorului de lucru curent
  • șir getcwd(void)

    Returnează numele directorului de lucru curent.


  • opendir() - Deschide un director
  • resource opendir (calea șirului)

    Returnează un handle de director pentru utilizare ulterioară cu funcțiile closedir(), readdir() și rewinddir().

    Dacă calea nu există sau directorul situat la calea specificată nu poate fi deschis din cauza restricțiilor legale sau a erorilor sistemului de fișiere, funcția opendir() returnează FALSE și generează un mesaj de eroare PHP de nivelul E_WARNING. Puteți suprima un mesaj de eroare prefixând numele funcției opendir() cu simbolul „@”.

    Exemplu de cod

    Începând cu PHP 4.3.0, parametrul cale poate fi, de asemenea, orice URL, accesând care rezultă într-o listă a fișierelor și directoarelor sale. această metodă funcționează numai atunci când se utilizează file:// url packer. PHP 5.0.0 a adăugat suport pentru ftp:// url packer.


  • readdir - Obține un element de director prin mânerul său
  • string readdir (catalog de resurse)

    Returnează numele următoarei intrări secvențiale din director. Numele elementelor sunt returnate în ordine, în funcție de sistemul de fișiere.

    Observați modul în care funcția readdir() returnează valoarea din exemplul de mai jos. Acest exemplu verifică dacă o valoare (expresiile sunt identice atunci când sunt egale și sunt valori de același tip - vezi capitolul Operatori de comparație pentru mai multe informații) este identică cu FALS deoarece, în caz contrar, orice intrare de director al cărei nume poate fi exprimat ca FALS , va opri bucla (de exemplu, un element numit „0”).

    Exemplu de cod

    Rețineți că funcția readdir() returnează, de asemenea, elemente numite și, dacă nu doriți să primiți acele valori, aruncați-le:

    Exemplu de cod


  • rewinddir() - Resetează mânerul directorului
  • void rewinddir (catalog de resurse)

    Resetează fluxul de catalog transmis în parametrul de catalog pentru a indica începutul catalogului


  • scandir() - Obține o listă de fișiere și directoare situate la calea specificată
  • matrice scandir (catalog de șiruri [, int order])

    Returnează o matrice care conține numele fișierelor și directoarelor situate de-a lungul căii transmise în parametrul catalog. Dacă directorul nu este un director, funcția returnează FALSE și generează un mesaj de eroare E_WARNING.

    În mod implicit, sortarea se face în ordine alfabetică în ordine crescătoare. Dacă este specificat parametrul opțional de ordine (egal cu 1), sortarea se face în ordine alfabetică în ordine descrescătoare. Exemplu de cod

    Rezultatul va fi ceva de genul:

    Matrice ( => . => .. => bar.php => foo.txt => somedir) Matrice ( => somedir => foo.txt => bar.php => .. => .)

    Exemplu de cod

    EXEMPLU DE REZULTAT:

    Matrice ( => . => .. => bar.php => foo.txt => somedir) Matrice ( => somedir => foo.txt => bar.php => .. => .)

    Fiecare programator ar trebui să poată lucra corect cu fișierele. Acest articol se adresează programatorilor PHP începători, dar „colecția de rețete” va fi utilă și pentru utilizatorii avansați.

    Lucrul cu fișierele este împărțit în 3 etape:

    1. Deschiderea unui fișier.
    2. Manipularea datelor.
    3. Închiderea dosarului.

    eu. Deschiderea unui fișier

    Pentru a deschide un fișier în mediul PHP, utilizați funcția fopen(). Parametrii necesari pentru această funcție sunt numele fișierului și modul fișier.

    $fp = fopen("counter.txt", "r");

    Conform documentației PHP, se disting următoarele tipuri de moduri de fișiere:

    1. r – deschideți fișierul pentru doar citire.
    2. r+ - deschide un fișier pentru citire și scriere în același timp.
    3. w – creează un nou fișier gol. Dacă un astfel de fișier există deja în momentul apelului, acesta este distrus.
    4. w+ - similar cu r+, numai dacă un astfel de fișier există în momentul apelării, conținutul acestuia este șters.
    5. a – deschide un fișier existent în modul de scriere, cu indicatorul deplasat la ultimul octet al fișierului (până la sfârșitul fișierului).
    6. a+ - deschide un fișier în modul citire-scriere, cu indicatorul deplasat la ultimul octet al fișierului (până la sfârșitul fișierului). Conținutul fișierului nu este șters.

    Notă: mai poate exista un parametru opțional la sfârșitul oricăreia dintre linii: b sau t . Dacă este specificat b, fișierul este deschis în modul binar de citire/scriere. Dacă t , atunci modul de traducere a fluxului de linie este setat pentru fișier, adică. este perceput ca textual.

    Pentru a demonstra, luați în considerare următorul scenariu:

    //Deschide un fișier în moduri diferite
    $fp = fopen("counter.txt", "r"); // Modul binar
    $fp = fopen("counter.txt", "rt"); // Modul text
    $fp = fopen("http://www.yandex.ru", "r");// Deschide o conexiune HTTP pentru citire
    $fp = fopen("ftp://utilizator: [email protected]", "w"); //Deschide o conexiune FTP indicând numele de conectare și parola
    ?>

    II. Manipularea datelor fișierelor

    Puteți scrie date într-un fișier folosind PHP folosind funcția fwrite(). Această funcție preia 2 parametri obligatorii și 1 opțional. Parametrii necesari sunt descriptorul de fișier și modul fișier:

    $fp = fopen("counter.txt", "a"); // Deschideți fișierul în modul de scriere
    $mytext = "Trebuie să scriem această linie\r\n"; // Șir sursă
    $test = fwrite($fp, $mytext); // Scrieți în fișier
    if ($test) echo "Datele au fost introduse cu succes în fișier.";
    else echo "Eroare la scrierea în fișier.";
    fclose($fp); //Închide fișierul
    ?>

    Pentru a citi un fișier linie cu linie, utilizați funcția fgets(). Funcția ia 2 parametri necesari:


    dacă ($fp)
    {
    în timp ce (!feof($fp))
    {
    $mytext = fgets($fp, 999);
    echo $mytext."
    ";
    }
    }

    fclose($fp);
    ?>

    Notă: În acest exemplu, valoarea 999 specifică numărul de caractere care vor fi citite până când pointerul ajunge la sfârșitul fișierului (EOF).

    Pentru a citi fișierul ca un întreg, trebuie să utilizați funcția readfile(), care necesită 1 parametru necesar. Funcția deschide un fișier, își afișează conținutul într-o fereastră de browser și apoi închide fișierul:

    echoreadfile("counter.txt");
    ?>

    De asemenea, puteți utiliza funcția fpassthru() care ia 1 parametru necesar. Înainte de a utiliza această caracteristică, trebuie să deschideți fișierul în modul Citire. Când fișierul este citit, funcția închide automat fișierul (și descriptorul fișierului devine invalid).

    $fp = fopen("counter.txt", "r"); // Deschideți fișierul în modul citire
    if ($fp) echo fpassthru($fp);
    elseecho „Eroare la deschiderea fișierului”;
    ?>

    Foarte des există situații în care este necesar să citiți conținutul unui site într-o matrice. Această caracteristică implică utilizarea funcției fişier(). Când această funcție este apelată, fiecare linie a fișierului va fi stocată în element separat matricea specificată.

    Notă: funcția nu trebuie utilizată fişier() la fișiere binare (binary-safe), deoarece Nu este sigur în ceea ce privește citirea fișierelor binare și, dacă întâlnește undeva un caracter de sfârșit de fișier (EOF), nu garantează că vei citi întregul fișier binar.

    $file_array = fisier("counter.txt"); // Citiți fișierul în $file_array
    // Lucrul cu date matrice
    ?>

    Notă: Lucrul cu matrice este descris în detaliu, autori: Mukhametshin D.F., Simdyanov I.V.

    La sfârșitul articolului, veți găsi o „carte de rețete” bună pe matrice, care oferă soluții la multe probleme pe care le întâmpină un programator web în fiecare zi.

    Să ne imaginăm o situație în care un fișier trebuie citit caracter cu caracter. Pentru a face acest lucru putem folosi funcția fgetc(). Funcția preia un singur parametru. Funcția este utilă dacă trebuie să găsim orice caracter sau numărul de caractere identice.

    $fp = fopen("counter.txt", "r"); // Deschideți fișierul în modul citire
    dacă ($fp)
    {
    în timp ce(!feof($fp))
    {
    $car = fgetc($fp);
    if ($car == "c") $i = $i + 1;// Găsiți caracterul "c"
    }
    echo „Numărul de litere „c” din fișier: „. $i;
    }
    else echo "Eroare la deschiderea fișierului";
    ?>

    III. Închiderea unui fișier

    Fișierul este închis folosind funcția fclose(), care necesită 1 parametru necesar.

    $fp = fopen("counter.txt", "r");
    dacă ($fp)
    {
    echo „Fișierul este deschis”;
    fclose($fp); // Închiderea fișierului
    }
    ?>

    Culegere de retete

    1) Trebuie să verificăm dacă acesta sau acel fișier există. Pentru a face acest lucru vom folosi funcția fișier_există().

    myfile("counter.txt"); // Folosește funcția myfile, trecând numele fișierului ca argument

    function myfile($name) //Creeaza o functie pentru a verifica existenta unui fisier
    {
    if (file_exists($name)) echo "Fișierul există";

    }
    ?>

    Notă: Funcție fișier_există nu verifică fișierele de pe serverul web la distanță. Pentru funcționare corectă funcțiile, fișierul cu script-ul trebuie să fie localizat pe același server cu fișierul verificat.

    2) Determinați dimensiunea fișierului folosind funcția dimensiunea fișierelor()

    myfile("counter.txt");

    function myfile($name) //Creează o funcție pentru a verifica existența unui fișier și a determina dimensiunea fișierului
    {
    if (file_exists($name)) echo "File size: ".filesize($name)." bytes";
    else echo "Fișierul nu există";
    }
    ?>

    3) Creați un fișier temporar utilizând funcția tmpfile()

    $myfile = tmpfile();
    fwrite($myfile, "Această linie este scrisă într-un fișier temporar."); // Scrieți într-un fișier temporar
    fseek($fișierul meu, 0); // Setați indicatorul fișierului
    echo fread($fișierul meu, 1024); // scoate conținutul fișierului
    ?>

    4) Trebuie să determinați numărul de linii din fișier. Pentru a face acest lucru folosim funcția conta()

    $fp = fisier("counter.txt");
    echo „Numărul de linii în fișier: „.count($fp);
    ?>

    5) Trebuie să folosim un mecanism de blocare a fișierelor

    $fp = fopen("counter.txt", "a");
    flock($fp, LOCK_EX); // Blocați fișierul pentru scriere
    fwrite($fp, "Linie de scris");
    turmă ($fp, LOCK_UN); // Deblocați
    fclose($fp);
    ?>

    6) Trebuie să eliminăm o anumită linie din fișier

    $num_stroka = 5; //Ștergeți linia 5 din fișier
    $fisier = fisier("counter.txt"); // Citiți întregul fișier într-o matrice

    pentru($i = 0; $i< sizeof($file); $i++)
    if($i == $num_stroka) unset($fișier[$i]);

    $fp = fopen("counter.txt", "w");
    fputs($fp, implode("", $fișier));
    fclose($fp);
    ?>

    7) Determinarea tipului de fișier. Folosind funcția

    PHP

    file_exists("test.txt")//Fișierul există? filesize("test.txt");//Aflați dimensiunea fișierului //Este returnat marcajul de timp: fileatime("test.txt");//Data ultimului acces la fișier //date("d M Y" , $atime); filemtime("test.txt");//Data modificării fișierului //data("d M Y", $mtime); filecttime("test.txt");//Data creării fișierului (Windows) //date("d M Y", $ctime);

    Fișiere: moduri de operare

    PHP

    resource fopen (nume fișier șir, mod șir) // resursă - returnează un pointer către fișier în caz de succes, sau FALSE în caz de eroare
    Mod de operare Descriere
    r deschide fișierul numai în citire;
    r+ deschideți fișierul pentru citire și scriere;
    w deschideți fișierul doar pentru scriere. Dacă există, atunci conținutul curent al fișierului este distrus. Poziția curentă este setată la început;
    w+ deschideți fișierul pentru citire și scriere. Dacă există, atunci conținutul curent al fișierului este distrus. Poziția curentă este setată la început;
    O deschide fișierul pentru scriere. Poziția curentă este setată la sfârșitul fișierului;
    a+ deschideți fișierul pentru citire și scriere. Poziția curentă este setată la sfârșitul fișierului;
    b procesează fișierul binar. Acest indicator este necesar atunci când lucrați cu fișiere binare pe Windows.

    Deschiderea și închiderea fișierelor în PHP

    PHP

    $fi = fopen("test.html", "w+") sau die ("Eroare"); //Exemple $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //Închide fclose($fi)

    Citirea fișierelor în PHP

    PHP

    //Citiți fișierul fread(int fi, int length) $str = fread($fi, 5); // Citiți primele 5 caractere echo $str;

    // deoarece cursorul s-a mutat $str = fread($fi, 12); // Citiți următoarele 12 caractere echo $str; fgets(int fi[, int length]) // Citiți o linie dintr-un fișier fgetss(int fi, int length [, șir admisibil]) // Citiți o linie dintr-un fișier și eliminați etichetele HTML // șir permis - etichete care trebuie lăsat fgetc(int fi) //Citește un caracter dintr-un fișier Inițial, scrierea va avea loc la începutul fișierului, prin suprascrierea datelor existente, dacă există. Prin urmare, dacă trebuie să scrieți ceva la sfârșitul fișierului, trebuie să setați cel potrivit modul de citire

    , de exemplu, a+ .

    PHP

    Manipularea cursorului în fișierele PHP

    int fseek(int fi, int offset [, int unde]) //Setarea cursorului // int fi - pointer către fișier //offset - numărul de caractere de mutat. //de unde: //SEEK_SET - mișcarea începe de la începutul fișierului; //SEEK_CUR - mișcarea începe de la poziția curentă; //SEEK_END - mișcarea începe de la sfârșitul fișierului. fseek($fi, -10, SEEK_END); //Citește ultimele 10 caractere $s = fread($fi, 10); $pos = ftell($fi); //Aflați poziția curentă rewind($f)//resetați cursorul bool feof($f) //sfârșitul fișierului

    PHP

    array file(string filename) // Obține conținutul fișierului sub forma unei matrice // O altă opțiune pentru lucrul direct cu datele file_get_contents(string filename) // Citirea (obținerea întregului fișier într-o singură linie) // Scrierea în fișierul (inițial suprascris) file_put_contents(string nume fișier, date mixte[,int flag]); //FILE_APPEND // Scrieți la sfârșitul fișierului: file_put_contents("test.txt", "data", FILE_APPEND); //Dacă scrieți o matrice, $array = array("I", "live"); file_put_contents("test.txt",$array); //apoi primim "Ilive"

    Gestionarea fișierelor în php

    PHP

    copy(sursă șir, destinație șir); // Copierea fișierului rename(str nume vechi, str nume nou); // Redenumiți fișierul unlink(string filename); // Ștergerea unui fișier

    Încărcarea fișierelor pe serverul PHP

    //Setări PHP.ini file_uploads (on|off) // permite sau nu permite încărcarea fișierelor upload_tmp_dir // folder temporar pentru fișierele încărcate. în mod implicit, folderul temporar upload_max_filesize (implicit = 2 Mb) // max. dimensiunea fișierului de încărcare post_max_size // dimensiunea totală a formularului trimis (trebuie să fie mai mare decât upload_max_filesize) // Încărcare simplă

    HTML

    Lucrul cu fișierele de pe server

    PHP

    //Accept date $tmp = $_FILES["userfile"]["tmp_name"]; $name = $_FILES["userfile"]["nume"]; //Muta fisierul move_uploaded_file($tmp, nume); move_uploaded_file($tmp, „încărcare/”.nume); // redirecționează fișierul în folderul de încărcare // în raport cu fișierul curent // Ce este în matricea $_FILES $_FILES[„userfile”][”name”] // numele fișierului, de exemplu, test.html $_FILES[ "userfile"][" tmp_name"] // nume de fișier temporar (cale) $_FILES["userfile"]["size"] // dimensiune fișier $_FILES["userfile"]["tip"] // tip fișier $ _FILES["userfile"] ["eroare"] // 0 - fără erori, număr - da

    Lucrul cu fișiere - punct important. Deoarece pot stoca date, jurnalele etc. Știm deja cum să încărcăm fișiere pe server. Acum trebuie să înveți cum să interacționezi cu conținutul lor.
    Procesul de lucru cu un fișier este împărțit în trei etape:
    1. Deschideți un fișier.
    2. Lucrați la conținutul fișierului deschis.
    3. Închiderea fișierului.

    Funcţie fopen() Există mai multe moduri prin care fișierele sunt deschise, iată tabelul lor:

    Lista modurilor posibile pentru fopen()
    modul Descriere
    'r' Deschide fișierul numai în citire; plasează indicatorul la începutul fișierului.
    'r+' Deschide un fișier pentru citire și scriere; plasează indicatorul la începutul fișierului.
    'w' Deschide fișierul numai pentru scriere; plasează un indicator la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
    'w+' Deschide un fișier pentru citire și scriere; plasează un indicator la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
    'o' Deschide fișierul numai pentru scriere; plasează indicatorul la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze. În acest mod funcția fseek() nu este cazul, intrările sunt întotdeauna adăugate.
    'a+' Deschide un fișier pentru citire și scriere; plasează indicatorul la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze. În acest mod funcția fseek() afectează doar locația de citire, înregistrările sunt întotdeauna adăugate.
    'x' Creează și deschide doar pentru scris; plasează indicatorul la începutul fișierului. Dacă fișierul există deja, sunați fopen() se termină cu eșec, se va întoarce FALSși va da o eroare de nivel E_AVERTISMENT. Dacă fișierul nu există, va încerca să-l creeze. Acest lucru este echivalent cu specificarea steagurilor O_EXCL|O_CREAT pentru apelul de sistem intern deschis(2).
    'x+' Creează și deschide spre citit și scris; in rest are acelasi comportament ca 'x'.
    'c' Deschide fișierul doar pentru scriere. Dacă fișierul nu există, acesta este creat. Dacă fișierul există, atunci nu este trunchiat (spre deosebire de 'w'), iar apelarea acestei funcții nu provoacă o eroare (cum este cazul 'x'). Indicatorul fișierului va fi setat la începutul fișierului. Acest lucru poate fi util dacă doriți să blocați un fișier (vezi turmă()) înainte de schimbare, de la utilizare 'w' poate trunchia fișierul înainte ca blocarea să fi fost obținută (dacă doriți să trunchiați fișierul, puteți utiliza funcția ftruncate() după o cerere de blocare).
    'c+' Deschide un fișier pentru citire și scriere; in rest are acelasi comportament ca 'c'.

    Puteți adăuga încă două valori la modul:
    b- fișierul se deschide în modul binar
    t- fișierul se deschide ca text

    De la cuvinte la fapte. Acum puțină practică pentru a consolida. Să creăm un fișier în folderul nostru de fișiere numit test.txt, dar faceți-o cu folosind PHP. Și vom scrie linia „Salut tuturor!”, după care vom citi această linie din fișier și o vom afișa pe ecran. Am decis să fac totul sub formă de funcții pentru utilizare reutilizabilă, iată ce a ieșit din asta:

    "; else echo "Nu s-au putut scrie datele!
    "; //închideți fișierul fclose($file); ) function fileread($filename)( //calea către fișierul $path = "fișiere/".$filename.".txt"; //deschideți fișierul pentru citire $fișier = fopen($cale,"r" // dacă fișierul a fost deschis cu succes if($fișier)( // apoi până când fișierul ajunge la sfârșit în timp ce (!feof($fișier)) ( // citește datele din fișierul $read = fgets ($fișier // și afișați textul pe ecran echo $read);
    "; ) ) // dacă fișierul nu s-a deschis, atunci raportați-l altfel echo "Eroare la deschiderea fișierului
    "; // Închideți fișierul fclose($fișier); ) // Creați un fișier fcreate("test","Bună ziua tuturor!"); // Citiți datele din fișier fileread("test"); ?>

    Acum puteți crea și edita fișiere.
    ————————
    Ce știi despre cele mai puternice supercomputere? Nimic? Atunci citeste aici