Cum pentru a șterge o linie dintr-un fișier
Atunci când se lucrează cu cantități mici de date în PHP, este uneori mai ușor să le stoca într-un fișier, puteți crea o bază de date și de a organiza interacțiunea cu script-urile ei. În astfel de cazuri, sarcina de a elimina anumite rânduri dintr-un fișier text nu apare de multe ori. Să examinăm în detaliu posibil cel mai simplu mod de a face acest lucru.
veți avea nevoie de
- Cunoștințe de bază PHP
instrucție
- Avem fișier text allStrings.txt, care conține un număr de linii de date
- pe care doriți să îl eliminați din linia de fișier №44
Algoritm pentru a rezolva această problemă este: aveți nevoie pentru a deschide fișierul, citiți informațiile din ea siruri într-o matrice șir, și suprascrie conținutul fișierului existent de matrice, sărind peste linia, destinată eliminării.$ LineToKill = 44, apoi citiți doar fișierul într-o matrice de siruri de caractere: $ stringsArray = fișier ($ filename); verifica dacă există o linie în fișierul necesar. Tot codul suplimentar va fi executat numai în cazul în care starea $ lineToKill nu mai mult decât numărul de rânduri în matrice $ stringsArray: if ($ lineToKill // aici va fi bucla principală de program
> În cazul în care condiția nu este îndeplinită, atunci nu avem nimic de a elimina. Lăsați script-ul imprimă un mesaj informativ despre acest lucru: altceva echo „Numărul de linii din fișierul este mai mică decât“ $ lineToKill, în cazul în care condiția este îndeplinită, este necesar pentru a curăța fișierul original la un nou record ..: $ filehandle = fopen ($ filename, „w“) „!“ ; acum, avem nevoie de o buclă care peste toate elementele reiterează de o serie de siruri de caractere. Dar, pentru că indexarea matrice începe de la zero, iar numărul liniei care urmează să fie șters, am numărat pe una, apoi înainte de începerea ciclului de a reduce valoarea de $ lineToKill de unul, astfel încât să nu repete această operație la fiecare pas: $ lineToKill -; smacking o buclă: foreach ( $ $ stringsArray ca valoare cheie => $)
// cod de aici fiecare pas ciclu
> $ Variabilă cheie va conține indicele rândului curent în matrice, iar valoarea variabilei $ - valoarea acestei linii. La fiecare pas, ciclul se va compara șirul de cod într-o matrice proiectat pentru a elimina un număr și în cazul în care nu se potrivesc, atunci vom scrie valoarea acestui șir în fișierul: if (! Tasta $ = $ lineToKill) fwrite ($ filehandle, valoarea $); A în cazul în care meciul, apoi scrie la dosar nu vor, și va imprima mesajul a fost șters cu succes: „eliminat“ .. altceva echo „string“ $ lineToKill, iar la sfârșitul ciclului de lucru, atunci când acesta este terminat și scrie la dosar, ar trebui să-l închidă politicos jos: fclose ($ filehandle);if ($ lineToKill $ filehandle = fopen ($ filename, "w");
foreach ($ stringsArray ca $ cheie = valoare> $)
în cazul în care ($ cheie = $ lineToKill!) fwrite ($ filehandle, valoarea $);
.. echo Else "string" $ lineToKill "eliminat.";
Apoi, pentru munca trebuie să creați un fișier temporar. Hai să o facem în dosarul „tmp“ și fișierul temporar prefixul va da același: $ tempfile = tempnam ( „/ tmp“, „tmp“); Acum încearcă să deschidă fișierul sursă pentru a citi: if ($ filehandle = @fopen ($ filename " rb „))
// acest cod va fi executat în cazul deschiderii normale a fișierului original
> Dacă nu reușesc - activitatea în continuare a script-ul nu are nici un sens, să ne omoare proces cu mesaje adecvate: altfel die ( „fișier sursă nu există!“); Dacă fișierul este deschis în mod normal, apoi publică o notificare cu privire la aceasta și să încerce să deschidă un fișier temporar creat anterior cu mesaje adecvate: echo „fișierul original există“;
în cazul în care ($ tempHandle = fopen ($ tempfile, „w“)) echo „a fost creat fișierul temporar.“ Acum este timpul pentru a începe ciclul de linii de citire din fișierul sursă, care va continua până când sunt odihnit într-un fișier ce se termină: în timp ce (feof (! $ filehandle))
// acest cod va lucra cu linia curentă
fclose ($ tempHandle); În cele din urmă redenumiți fișierul temporar cu originalul. Dacă această operațiune are succes, acesta va emite un mesaj adecvat: în cazul în care (redenumi ($ tempfile, $ filename)) echo "string $ lineToKill eliminate";$ LineToKill = 44; $ tempfile = tempnam ( "/ tmp", "tmp");
echo „fișierul original există“;
în cazul în care ($ tempHandle = fopen ($ tempfile, "w")) echo "este creat fișierul temporar.";
altfel mor ( "fișier sursă nu există!"), în timp ce (feof ($ filehandle)!)
în cazul în care ($ lineToKill = (++ $ lineNum)!) fwrite ($ tempHandle, $ lineToWrite);