Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • PHP fajl u varijablu. Kako pravilno čitati datoteke sa PHP-om

PHP fajl u varijablu. Kako pravilno čitati datoteke sa PHP-om

preuzimanja $ _ (8)

Moram da učitam PHP fajl u varijablu. Na primjer uključuju ();

Skinuo sam jednostavnu HTML datoteku poput ove:

$ Vdata = file_get_contents ("textfile.txt");

Ali sada moram da preuzmem PHP fajl.

Odgovori

Ako vaš fajl ima povratnu izjavu:

"Afeganistão", "ZA" => "África do Sul", ... "ZW" => "Zimbabué");

Ovu varijablu možete dobiti ovako:

$ data = uključiti $ filePath;

Alternativno, možete započeti baferovanje izlaza, uključiti / zahtijevati, a zatim zaustaviti baferiranje. Sa ob_get_contents (), možete jednostavno dobiti stvari koje je izdala druga PHP datoteka u varijablu.

Ako želite da preuzmete datoteku bez pokretanja preko web servera, sljedeće bi trebalo raditi.

$ string = eval (file_get_contents ("file.php"));

Tada će se učitati sadržaj datoteke. PHP fajl mora biti u potpunosti formiran sa oznakamaDa bi eval to procijenio.

Pretpostavljam da želite da primite PHP generisani sadržaj, ako tako:

$ Vdata = file_get_contents ("http: //VAŠ_HOST/VAŠ/FILE.php");

Inače, ako želite da primite Izvorni kod PHP datoteke, ovo je isto kao i .txt fajl:

$ Vdata = file_get_contents ("put / do / VAŠ / FILE.php");

U teoriji, možete jednostavno koristiti fopen, a zatim koristiti stream_get_contents.

$ stream = fopen ("file.php", "r"); $ string = stream_get_contents ($ stream); fclose ($ stream);

Ako koristite http: // kao što je eyel predložio, moći ćete čitati samo izlaz PHP skripte. PHP skriptu možete čitati samo ako se nalazi na istom serveru kao i vaša skripta. Onda možete koristiti nešto slično

$ Vdata = file_get_contents ("/ path / to / your / file.php");

Evo kako ja to radim (postoji mnogo načina):

  1. Pretvaranje podataka u Json
  2. Zovi AJAX da dobijete fajl Json
  3. Transformacija Json u objekat Javascript

KORAK 1

connect_error) (die ("Konekcija nije uspjela:". $ conn-> connect_error);) $ sql = "IZABERI ID, ime, sliku SA telefona"; $ rezultat = $ conn-> upit ($ sql); while ($ red = $ rezultat-> fetch_assoc ()) ($ v = $ red;) echo json_encode ($ v); $ conn-> zatvori (); ?>

KORAK 2

Funkcija showUser (fnc) (var xhttp = novi XMLHttpRequest (); xhttp.onreadystatechange = funkcija () (if (this.readyState == 4 && this.status == 200) (// KORAK 3 var p = JSON.parse ( this.responseText);)))

Svaki programer bi trebao biti u stanju da ispravno radi sa fajlovima. Ovaj članak je namijenjen početnicima PHP programerima, međutim, "zbirka recepata" će biti korisna za napredne korisnike.

Rad sa fajlovima podeljen je u 3 faze:

  1. Otvaranje fajla.
  2. Manipulacija podacima.
  3. Zatvaranje fajla.

I. Otvaranje fajla

Da biste otvorili datoteku u PHP okruženju, koristite funkciju otvori ()... Potrebni parametri za ovu funkciju su naziv datoteke i način rada datoteke.

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

Prema PHP dokumentaciji razlikuju se sljedeće vrste režima datoteka:

  1. r - otvoren fajl samo za čitanje.
  2. r + - otvara fajl istovremeno za čitanje i pisanje.
  3. w - kreirati novu praznu datoteku. Ako u trenutku poziva takav fajl već postoji, tada se uništava.
  4. w + - je sličan r +, samo ako takva datoteka postoji u vrijeme poziva, njen sadržaj se briše.
  5. a - otvara postojeću datoteku u načinu pisanja, dok se pokazivač pomjera na posljednji bajt datoteke (na kraj datoteke).
  6. a + - otvara datoteku u načinu čitanja i pisanja, dok se pokazivač pomjera na posljednji bajt datoteke (na kraj datoteke). Sadržaj datoteke se ne briše.

Napomena: na kraju bilo kog reda može biti još jedan opcioni parametar: b ili t. Ako je naveden b, tada se datoteka otvara u binarnom načinu čitanja/pisanja. Ako je t, tada je za datoteku postavljen način prijevoda linije, tj. percipira se kao tekstualno.

Za demonstraciju razmotrite sljedeći scenario:

// Otvara fajl na različite načine
$ fp = fopen ("counter.txt", "r"); // Binarni način rada
$ fp = fopen ("counter.txt", "rt"); // Tekstualni način rada
$ fp = fopen ("http://www.yandex.ru", "r"); // Otvara HTTP vezu za čitanje
$ fp = fopen ("ftp: // korisnik: [email protected]"," w "); // Otvaranje FTP veze sa prijavom i lozinkom
?>

II... Manipulacija podacima u fajlu

Možete upisati podatke u datoteku koristeći PHP koristeći funkciju fwrite ()... Ova funkcija uzima 2 potrebna parametra i 1 opcioni. Potrebni parametri su deskriptor datoteke i način rada datoteke:

$ fp = fopen ("counter.txt", "a"); // Otvorite datoteku u načinu pisanja
$ mytext = "Moramo napisati ovaj red \ r \ n"; // Izvorni niz
$ test = fwrite ($ fp, $ mytext); // Zapiši u datoteku
if ($ test) echo "Podaci su uspješno uneseni u datoteku.";
else echo "Greška pri pisanju u datoteku.";
fclose ($ fp); // Zatvorite datoteku
?>

Za čitanje datoteke red po red, koristite funkciju fgets ()... Funkcija uzima 2 potrebna parametra:


ako ($ fp)
{
dok (! feof ($ fp))
{
$ mytext = fgets ($ fp, 999);
echo $ mytext."
";
}
}

fclose ($ fp);
?>

Napomena: U ovom primjeru, vrijednost 999 određuje broj znakova koji će se čitati dok pokazivač ne dođe do kraja datoteke (EOF).

Da biste pročitali datoteku u cjelini, trebate koristiti funkciju readfile () koji uzima 1 potreban parametar. Funkcija otvara datoteku, prikazuje njen sadržaj u prozoru pretraživača, a zatim zatvara datoteku:

echoreadfile ("counter.txt");
?>

Također možete koristiti funkciju fpassthru () koja uzima 1 potreban parametar. Prije korištenja ove funkcije, morate otvoriti datoteku u načinu čitanja. Kada se datoteka završi sa čitanjem, funkcija automatski zatvara datoteku (i deskriptor datoteke postaje nevažeći).

$ fp = fopen ("counter.txt", "r"); // Otvorite datoteku u načinu čitanja
if ($ fp) echo fpassthru ($ fp);
elseecho "Greška pri otvaranju datoteke";
?>

Vrlo često postoje situacije kada je potrebno pročitati sadržaj stranice u niz. Ova funkcija je omogućena korištenjem funkcije fajl ()... Kada se pozove ova funkcija, svaki red datoteke će biti sačuvan u zasebnom elementu navedenog niza.

Napomena: Nemojte koristiti funkciju fajl () na binarne datoteke (binarno-sigurne), jer nije sigurno u smislu čitanja binarnih datoteka, ako u isto vrijeme negdje postoji znak za kraj datoteke (EOF), onda to ne garantuje da ćete pročitati cijelu binarnu datoteku.

$ file_array = datoteka ("counter.txt"); // Čitanje datoteke u $ file_array
// Rad s nizom podataka
?>

Napomena: Rad sa nizovima je detaljno opisan, autori: Mukhametshin D.F., Simdyanov I.V.

Na kraju članka naći ćete dobru "knjigu recepata" za nizove koja pruža rješenje za mnoge probleme s kojima se web programer svakodnevno susreće.

Zamislimo situaciju u kojoj fajl treba čitati znak po znak. Za to možemo koristiti funkciju fgetc ()... Funkcija uzima jedan parametar. Funkcija je korisna ako trebamo pronaći bilo koji znak ili broj identičnih znakova.

$ fp = fopen ("counter.txt", "r"); // Otvorite datoteku u načinu čitanja
ako ($ fp)
{
dok (! feof ($ fp))
{
$ char = fgetc ($ fp);
if ($ char == "c") $ i = $ i + 1; // Pronađite znak "c"
}
echo "Broj slova" c "u datoteci:". $ i;
}
else echo "Greška pri otvaranju datoteke";
?>

III... Zatvaranje fajla

Zatvaranje datoteke pomoću funkcije fclose () koji uzima 1 traženi parametar.

$ fp = fopen ("counter.txt", "r");
ako ($ fp)
{
echo "Datoteka otvorena";
fclose ($ fp); // Zatvorite datoteku
}
?>

Zbirka recepata

1) Moramo provjeriti postoji li ovaj ili onaj fajl. Da bismo to učinili, koristit ćemo funkciju file_exists ().

myfile ("counter.txt"); // Koristi funkciju myfile, prenoseći ime datoteke kao argument

function myfile ($ name) // Kreirajte funkciju da provjerite postoji li datoteka
{
if (file_exists ($name)) echo "Datoteka postoji";

}
?>

Napomena: Funkcija file_exists ne provjerava datoteke na udaljenom web serveru. Da bi funkcija ispravno radila, datoteka skripte mora biti smještena na serveru gdje se nalazi datoteka koja se provjerava.

2) Odredite veličinu datoteke pomoću funkcije veličina fajla()

myfile ("counter.txt");

function myfile ($ name) // Kreirajte funkciju za provjeru postojanja datoteke i određivanje veličine datoteke
{
if (file_exists ($name)) echo "Veličina datoteke:" .filesize ($name). "byte";
else echo "Datoteka ne postoji";
}
?>

3) Kreirajte privremeni fajl koristeći funkciju tmpfile()

$ myfile = tmpfile ();
fwrite ($ myfile, "Ovaj red je upisan u privremenu datoteku."); // Pisanje u privremenu datoteku
fseek ($ myfile, 0); // Postavljanje pokazivača datoteke
echo fread ($ myfile, 1024); // prikazujemo sadržaj datoteke
?>

4) Morate definirati broj redova u datoteci. Za to koristimo funkciju count()

$ fp = datoteka ("counter.txt");
echo "Broj redova u datoteci:" .count ($ fp);
?>

5) Moramo koristiti mehanizam za zaključavanje datoteke

$ fp = fopen ("counter.txt", "a");
stado ($ fp, LOCK_EX); // Zaključaj fajl za pisanje
fwrite ($ fp, "String za pisanje");
stado ($ fp, LOCK_UN); // Otključaj
fclose ($ fp);
?>

6) Moramo ukloniti određeni red iz datoteke

$ broj_stroka = 5; // Ukloni red 5 iz datoteke
$ file = fajl ("counter.txt"); // Čitanje cijele datoteke u niz

za ($ i = 0; $ i< sizeof($file); $i++)
if ($ i == $ num_stroka) unset ($ fajl [$ i]);

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

7) Određivanje tipa datoteke. Koristimo funkciju

Korištenje funkcija fopen, fclose, feof, fgets, fgetss i fscanf

Hajde da navedemo sve mogućnosti

Jedna od prednosti rada sa modernim programskim jezicima kao što je PHP je velika količina dostupnih mogućnosti. PHP je lako mogao da usvoji Perl moto, "Postoji više načina da se nešto uradi", posebno kada je u pitanju rukovanje datotekama. Ali s obiljem raspoloživih sredstava, postavlja se pitanje koje je najbolje za obavljanje posla. Naravno, u stvarnosti, odgovor na ovo pitanje zavisi od toga koje ciljeve ste postavili prilikom obrade datoteke, tako da je učenje svih karakteristika jezika vredno vremena.

Tradicionalne fopen metode

Fopen metode su možda poznatije C i C ++ programerima iz starih vremena, jer su to, u većoj ili manjoj mjeri, upravo alati koji su vam već dugi niz godina na dohvat ruke ako ste radili s ovim programiranjem jezicima. Za bilo koju od ovih metoda, slijedite standardnu ​​proceduru, koristeći fopen da otvorite datoteku, funkciju za čitanje podataka, a zatim fclose da zatvorite datoteku, kao što je prikazano u Listingu 1.

Listing 1. Otvaranje i čitanje datoteke sa fgetovima
$ file_handle = fopen ("myfile", "r"); while (! feof ($ file_handle)) ($ line = fgets ($ file_handle); echo $ line;) fclose ($ file_handle);

Iako su ove funkcije poznate većini iskusnih programera, dopustite mi da analiziram kako rade. U stvarnosti, slijedite ove korake:

  1. Otvorite fajl. $ file_handle pohranjuje vezu do samog fajla.
  2. Provjerite jeste li stigli do kraja datoteke.
  3. Nastavite čitati datoteku dok ne dođete do kraja, ispisujući svaki red koji pročitate.
  4. Zatvorite fajl.

Imajući to na umu, proći ću preko svake funkcije datoteke koja se ovdje koristi.

Fopen funkcija

Funkcija fopen uspostavlja vezu do datoteke. Kažem "povezuje" jer, osim otvaranja datoteke, fopen može otvoriti i URL:

$ fh = fopen ("http://127.0.0.1/", "r");

Ova linija koda stvara vezu na gornju stranicu i omogućava vam da je počnete čitati kao lokalnu datoteku.

Bilješka: Parametar "r" koji se koristi u fopen označava da je datoteka otvorena samo za čitanje. Budući da je pisanje u datoteku izvan okvira ovog članka, neću navoditi sve moguće vrijednosti parametra. Međutim, morate promijeniti "r" u "rb" ako čitate iz binarnih datoteka radi kompatibilnosti na više platformi. Primjer ove vrste bit će dat u nastavku.

Feof funkcija

Naredba feof određuje da li je pročitano do kraja datoteke i vraća True ili False. Petlja koja je data nastavlja se do kraja datoteke "myfile". Imajte na umu da feof također vraća False ako čitate URL, a veza je istekla jer nema više podataka za čitanje.

Fclose funkcija

Preskočite sredinu Listinga 1 i idite do kraja; fclose radi suprotno od fopen: zatvara vezu sa datotekom ili URL-om. Nakon izvršavanja ove funkcije, više nećete moći čitati iz datoteke ili utičnice.

Fgets funkcija

Vraćajući se nekoliko redova unazad u Listingu 1, nalazite se u samom srcu procesa rukovanja fajlom: direktno čitanje datoteke. Funkcija fgets je vaše "oružje" po izboru za prvi primjer. On hvata red podataka iz datoteke i vraća ga kao string. Odatle možete emitovati podatke ili ih na drugi način obraditi. Primjer u Listingu 1 ispisuje cijelu datoteku.

Ako odlučite da ograničite veličinu komada podataka na kojem radite, možete dodati argument u fgets da ograničite maksimalnu dužinu uhvaćene linije podataka. Na primjer, koristite sljedeći kod da ograničite dužinu niza na 80 znakova:

$ string = fgets ($ file_handle, 81);

Zamislite "\ 0", kraj reda u C, i postavite dužinu na jedan znak više nego što vam je zapravo potrebno. Kao što vidite, gornji primjer koristi 81, dok vam je potrebno 80 znakova. Neka vam postane navika dodavanje dodatnog znaka kad god trebate postaviti ograničenje dužine niza za datu funkciju.

Fread funkcija

Funkcija fgets je samo jedna od mnogih funkcija dostupnih za čitanje datoteke. Ovo je jedna od najčešće korištenih funkcija, jer je obrada datoteke red po red u većini slučajeva najrazumnija. U stvari, nekoliko drugih funkcija nudi slične mogućnosti. Međutim, analiza linija po red nije uvijek ono što želite.

I tu se okrećemo fridu. Funkcija fread se koristi za nešto drugačiju svrhu od fgets: namijenjena je čitanju iz binarnih datoteka (tj. datoteka koje izvorno nisu čitljivi tekst). Pošto koncept "stringova" nije relevantan za binarne datoteke (logičke strukture podataka obično nisu razbijene u redove), morate navesti broj bajtova za čitanje.

$ fh = fopen ("myfile", "rb"); $ data = fread ($ file_handle, 4096);

Gornji primjer čita 4096 bajtova (4 KB) podataka. Imajte na umu da bez obzira na vrijednost koju navedete, fread neće čitati više od 8192 bajta (8 KB).

Pod pretpostavkom da datoteka nije veća od 8 KB, isječak koda ispod bi trebao pročitati cijelu datoteku u jednom redu.

$ fh = fopen ("myfile", "rb"); $ data = fread ($ fh, veličina datoteke ("myfile")); fclose ($ fh);

Ako je datoteka veća, morat ćete koristiti petlju da pročitate ostatak datoteke.

Fscanf funkcija

Vraćajući se na obradu linija, imajte na umu da je fscanf također nasljednik tradicionalne funkcije biblioteke C. Ako niste upoznati s njom, fscanf čita polja podataka u varijable iz datoteke.

lista ($ field1, $ field2, $ field3) = fscanf ($ fh, "% s% s% s");

Nizovi za formatiranje koji se koriste u ovoj funkciji su dokumentovani u mnogim izvorima kao što je PHP.net, tako da neću ponavljati ovu informaciju ovde. Dovoljno je reći da je formatiranje stringova vrlo fleksibilno. Također treba napomenuti da su sva polja smještena u varijablu koju vraća funkcija. (U C-u bi bili proslijeđeni kao argumenti.)

Fgetss funkcija

Funkcija fgetss se razlikuje od tradicionalnih funkcija datoteka i daje vam bolju ideju o tome šta PHP može da uradi. Radi kao fgets, ali uklanja sve HTML ili PHP oznake na koje naiđe, ostavljajući samo "goli" tekst. Uzmimo donji HTML fajl.

Listing 2. Uzorak HTML datoteke
Moja titula

Ako razumete šta znači "Cause there ain" t no one for to you no boli "onda previše slušate bend America

Pokrenimo ga kroz fgetss funkciju.

Listing 3. Upotreba fgetss-a
$ file_handle = fopen ("myfile", "r"); while (! feof ($ file_handle)) (echo = fgetss ($ file_handle);) fclose ($ file_handle);

Evo šta dobijate kao izlaz:

Moj naslov Ako razumiješ šta znači "Cause there ain" t no one for to you no pain "onda slušaš previše benda America

Fpassthru funkcija

Bez obzira na to kako čitate podatke iz datoteke, preostale podatke možete ispisati koristeći standardnu ​​izlaznu cijev koristeći fpassthru funkciju.

fpassthru ($ fh);

Ova funkcija ispisuje podatke, tako da ih ne morate stavljati u varijablu.

Nelinearna obrada datoteke: kretanje kroz datoteku

Naravno, gore navedene funkcije vam omogućavaju samo uzastopno čitanje iz datoteke. Složenije datoteke mogu zahtijevati da pređete na različite dijelove datoteke na početku ili na kraju. Da biste to učinili, potrebna vam je funkcija fseek.

fseek ($ fh, 0);

Gornji primjer skače nazad na početak datoteke. Ako ne želite da pređete na sam početak fajla - recimo, dovoljan je jedan kilobajt - jednostavno napišite:

fseek ($ fh, 1024);

Od PHP V4.0, dostupno je i nekoliko drugih opcija. Na primjer, ako trebate skočiti naprijed 100 bajtova sa svoje trenutne pozicije, možete koristiti sljedeći kod:

fseek ($ fh, 100, SEEK_CUR);

Isto tako, skakanje unazad 100 bajtova se vrši pomoću:

fseek ($ fh, -100, SEEK_CUR);

Ako se želite vratiti na 100 bajtova prije kraja datoteke, umjesto toga koristite SEEK_END.

fseek ($ fh, -100, SEEK_END);

Kada dostignete svoju novu poziciju, možete koristiti fgets, fscanf ili neku drugu funkciju za čitanje podataka.

Bilješka: ne možete koristiti fseek na deskriptorima datoteka koji upućuju na URL-ove.

Snimanje cijele datoteke

Sada ćemo se osvrnuti na neke od jedinstvenih PHP-ovih mogućnosti rukovanja datotekama: rukovanje velikim blokovima podataka u jednom ili dva reda. Na primjer, kako možete uzeti datoteku i prikazati sav njen sadržaj na vašoj web stranici? Pa, vidjeli ste primjer korištenja petlje sa fgetovima. Ali kako to možete olakšati? Proces je gotovo smiješno jednostavan sa fgetcontents, koji stavlja cijeli fajl na niz.

$ my_file = file_get_contents ("myfilename"); echo $ my_file;

Iako nije najbolja opcija, ovu naredbu možete napisati i kraće:

echo file_get_contents ("myfilename");

Ovaj članak se prvenstveno odnosi na rukovanje lokalnim datotekama, međutim, vrijedno je napomenuti da također možete snimiti, prikazati i analizirati druge web stranice koristeći opisane funkcije.

echo file_get_contents ("http://127.0.0.1/");

Ova komanda je zapravo ista kao:

$ fh = fopen ("http://127.0.0.1/", "r"); fpassthru ($ fh);

Sigurno gledate ove primjere i mislite: "Ovo još uvijek oduzima previše vremena." PHP programeri se slažu s vama. Stoga, gornju naredbu možete skratiti na:

readfile ("http://127.0.0.1/");

Funkcija readfile podrazumevano upisuje ceo sadržaj datoteke ili Web stranice u izlazni bafer. Podrazumevano, ova komanda prikazuje poruku o grešci u slučaju neuspjeha. Da biste izbjegli ovo ponašanje (ako ga želite), pokušajte naredbu:

@readfile ("http://127.0.0.1/");

Naravno, ako trebate obraditi sadržaj datoteka, onda je jedan red koji vraća file_get_contents vjerovatno previše. Možda biste željeli da ga prvo podijelite na dijelove koristeći funkciju split ().

$ array = split ("\ n", file_get_contents ("myfile"));

Ali zašto su vam potrebne sve te komplikacije ako postoji savršeno prikladna funkcija koja će obaviti posao umjesto vas? Funkcija PHP file () to radi u jednom koraku: vraća niz stringova čiji su elementi nizovi datoteke.

$ array = datoteka ("myfile");

Treba napomenuti da postoji mala razlika između dva gornja primjera. Komanda split uklanja nove redove, dok naredba file završava sa novim redovima (baš kao kod fgets).

PHP mogućnosti, međutim, daleko premašuju gore opisane. Možete raščlaniti cijele .ini datoteke u PHP stilu sa samo jednom komandom parse_ini_file. Naredba parse_ini_file primjenjuje se na datoteke slične onima u Listingu 4.

Listing 4. Primjer .ini datoteke
; Ime komentara = Potraga za "Kralj Artur" = Potraga za svetim gralom omiljena boja = Plava Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Sljedeće naredbe predstavljaju datoteku kao niz, a zatim ispisuju taj niz:

$ file_array = parse_ini_file ("holy_grail.ini"); print_r $ file_array;

Ovo će proizvesti sljedeći izlaz:

Listing 5. Izlaz
Niz (=> Kralj Artur => U potrazi za Svetim gralom => Plavi => Mark Twain => Whoopi Goldberg)

Naravno, možete vidjeti da ova komanda ima spojene sekcije. Ovo je zadana postavka, ali možete lako izvršiti potrebna podešavanja koristeći drugi argument za parse_ini_file: process_sections, koji je Boolean varijabla. Postavite process_sections na True.

$ file_array = parse_ini_file ("holy_grail.ini", istina); print_r $ file_array;

I vaš izlaz će izgledati ovako:

Listing 6. Izlaz
Niz (=> Niz (=> Kralj Artur => Za traženje Svetog grala => Plavo) => Niz (=> Mark Twain => Whoopi Goldberg))

PHP postavlja podatke u višedimenzionalni niz koji se lako može raščlaniti za analizu.

Ali to je samo vrh ledenog brega kada je u pitanju rukovanje datotekama u PHP-u. Složenije funkcije kao što su tidy_parse_file i xml_parse mogu vam pomoći da raščlanite HTML i XML dokumente, respektivno. Pogledajte odjeljak za više informacija o tome kako ove funkcije rade. Oba su vrijedna razmatranja ako radite s ovim tipovima datoteka, ali umjesto da pogledate sve moguće tipove datoteka, možete pažljivo pročitati sadržaj ovog članka, gdje postoje neka dobra opća pravila za rad s funkcijama koje sam opisao do sad.

Dobar stil programiranja

Nikada nemojte pretpostavljati da će sve u vašem programu raditi kako je predviđeno. Na primjer: šta ako je datoteka koju tražite premještena? Što ako, kao rezultat promjene dozvola, ne možete pročitati sadržaj datoteke? Možete unaprijed provjeriti postojanje datoteke i dozvole za čitanje pomoću metoda file_exists i is_readable.

Listing 7. Korištenje file_exists i is_readable
$ filename = "myfile"; if (file_exists ($ filename) && is_readable ($ filename)) ($ fh = fopen ($ filename, "r"); # Obrada fclose ($ fh);)

Međutim, u praksi će ovaj dio koda možda biti pretjeran za vaš zadatak. Rukovanje vrijednostima koje vraća fopen je jednostavnije i preciznije.

if ($ fh = fopen ($ ime datoteke, "r")) (# Obrada fclose ($ fh);)

Budući da fopen vraća False u slučaju neuspjeha, to osigurava da se datoteka obrađuje samo ako se datoteka može otvoriti. Naravno, ako datoteka ne postoji ili je nečitljiva, očekivali biste da će povratna vrijednost biti negativna. Stoga je takva provjera zamka u koju padaju svi potencijalni problemi. Alternativno, možete koristiti prekid programa ili prikazati poruku o grešci ako se datoteka ne može otvoriti.

Kao i fopen, funkcije file_get_contents, file i readfile vraćaju False ako se datoteka ne može otvoriti ili obraditi. Funkcije fgets, fgetss, fread, fscanf i fclose također vraćaju False u slučaju greške. Naravno, s izuzetkom fclose, vjerovatno ste već obrađivali rezultate koje oni vraćaju. Što se fclose tiče, malo se može učiniti ako se deskriptor datoteke ne zatvori kako treba, tako da je provjera povratne vrijednosti fclose obično pretjerana.

Izbor je na vama

PHP nema nedostatak efikasnih načina za čitanje i raščlanjivanje datoteka. Klasične funkcije poput fread-a mogu vam pouzdano služiti većinu vremena, ili će vas možda više privući jednostavnost readfile-a ako je potrebno da dovršite zadatak. Izbor zaista zavisi od toga šta pokušavate da postignete.

Ako obrađujete velike količine podataka, fscanf će vjerovatno biti korisniji i efikasniji od, recimo, korištenja datoteke u kombinaciji sa sljedećim split i sprintf komandama. Alternativno, ako jednostavno prikazujete veliki tekst sa manjim izmjenama, funkcije datoteke, file_get_contents ili readfile mogu biti prikladnije. Ovo rješenje će vjerovatno biti ispravno kada koristite PHP za keširanje ili čak kreiranje privremenog proxyja.

PHP pruža mnoge alate za rad sa fajlovima. Upoznajte svaki od njih bolje i saznajte koji su alati najbolji za projekt na kojem radite. Nudi vam se širok izbor softverskih alata, koristite ih najefikasnije i zabavite se obrađujući svoje datoteke pomoću PHP-a.

Pre nego što pokušate da radite sa fajlom, preporučljivo je da se uverite da postoji. Za postizanje ovog zadatka obično se koriste dvije funkcije:

file_exists () i is_file ().

Funkcija f ile_exists () provjerava postoji li navedena datoteka. Ako datoteka postoji, funkcija vraća TRUE, u suprotnom se vraća FALSE. Sintaksa za funkciju file_exists () je:

bool file_exists (string fajl)

Primjer provjere postojanja datoteke:

ako (! file_exists ($ filename)):

print "File $ filename ne postoji!";

is_file ()

Funkcija is_file () provjerava postojanje navedene datoteke i mogućnost izvođenja operacija čitanja/pisanja na njoj. U suštini, is_file () je robusnija verzija file_exists () koja ne samo da provjerava da li datoteka postoji, već i da li može čitati i pisati podatke:

bool is_file (datoteka niza)

Sljedeći primjer pokazuje kako provjeriti da datoteka postoji i da se njome može raditi:

$ file = "somefile.txt";

if (is_file ($ fajl)):

print "Datoteka $ datoteka je važeća i postoji!";

print "Datoteka $ datoteka ne postoji ili nije važeća datoteka!";

Nakon što se uvjerite da tražena datoteka postoji i da s njom možete obavljati razne operacije čitanja/pisanja, možete nastaviti na sljedeći korak - otvaranje datoteke.

Funkcija Filesize () vraća veličinu (u bajtovima) datoteke sa datim imenom ili FALSE u slučaju greške. Sintaksa funkcije veličine datoteke () je:

int veličina datoteke (string ime datoteke)

Recimo da želite odrediti veličinu pastry.txt datoteke. Možete koristiti funkciju veličine datoteke () da dobijete informacije koje želite:

$ fs = veličina datoteke ("pastry.txt"); print "Pastry.txt je $ fs bajtova.";

Prikazuje se sljedeći izlaz:

Pastry.txt ima 179 bajtova.

Prije nego što možete izvršiti operacije nad datotekom, morate je otvoriti i povezati s ručnikom datoteke, a nakon što završite rad s datotekom, zatvorite je. O ovim temama se govori u sljedećem odjeljku.

Otvaranje i zatvaranje datoteka

Prije izvođenja I/O operacija na datoteci, morate je otvoriti pomoću funkcije fopen ().

Funkcija fopen () otvara datoteku (ako postoji) i vraća cijeli broj - tzv. manipulator datotekama(ručnik datoteke). Sintaksa za funkciju fopen () je:

int fopen (datoteka niza, način niza [, int enable_path])

Datoteka koja se otvara može se nalaziti na lokalnom sistemu datoteka, postojati kao standardni I/O tok ili predstavljati datoteku na udaljenom sistemu kako je primljena putem HTTP-a ili FTP-a.

Parametar datoteke može se specificirati u nekoliko oblika, navedenih u nastavku:

Ako parametar sadrži naziv lokalne datoteke, fopen () otvara tu datoteku i vraća oznaku.

Ako je parametar specificiran kao php: // stdin, php: // stdout ili php: // stderr, otvara se odgovarajući standardni ulazni/izlazni tok.

Ako parametar počinje prefiksom http: //, funkcija otvara HTTP vezu sa serverom i vraća ručicu za navedenu datoteku.

Ako parametar počinje s ftp: // prefiksom, funkcija otvara FTP vezu s poslužiteljem i vraća ručicu za navedenu datoteku. U ovom slučaju treba obratiti posebnu pažnju na dvije stvari: ako server ne podržava pasivni FTP, poziv fopen () neće uspjeti. Štaviše, FTP datoteke se otvaraju za čitanje ili pisanje.

Kada radi u pasivnom režimu, YR server čeka vezu sa strane klijenta. Kada radi u aktivnom režimu, server sam uspostavlja vezu sa klijentom. Zadani je obično aktivan način rada.

Parametar moda određuje mogućnost čitanja i pisanja u datoteku. Table 7.1 navodi neke od vrijednosti koje određuju način otvaranja datoteke.

Tabela 7.1. Načini otvaranja datoteka

Mode Opis
Samo čitanje. Trenutni pokazivač pozicije je postavljen na početak datoteke
r + Čitanje i pisanje. Trenutni pokazivač pozicije je postavljen na početak datoteke
w Samo piši. Trenutni pokazivač pozicije je postavljen na početak datoteke, a cijeli sadržaj datoteke je uništen. Ako datoteka ne postoji, funkcija pokušava da je kreira
w + Čitanje i pisanje. Trenutni pokazivač pozicije je postavljen na početak datoteke, a cijeli sadržaj datoteke je uništen. Ako datoteka ne postoji, funkcija pokušava da je kreira
a Samo piši. Pokazivač trenutne pozicije se nalazi na kraju datoteke. Ako datoteka ne postoji, funkcija pokušava da je kreira
a + Čitanje i pisanje. Pokazivač trenutne pozicije se nalazi na kraju datoteke. Ako datoteka ne postoji, funkcija pokušava da je kreira

Ako je opcioni treći parametar include_path 1, tada je putanja datoteke relativna na direktorij uključivanja naveden u datoteci php.ini (pogledajte poglavlje 1).

Ispod je primjer otvaranja datoteke s funkcijom fopen (). Die (), koji se koristi u kombinaciji sa fopen (), daje poruku o grešci ako se datoteka ne može otvoriti:

$ file = "userdata.txt"; // Neki fajl

$ fh = fopen ($ datoteka, "a +") ili die ("Datoteka ($ datoteka) ne postoji!");

Sljedeći isječak otvara vezu sa PHP lokacijom (http://www.php.net):

$ site = "http://www.php.net": // Server dostupan preko HTTP-a

$ sh = fopen ($ site., "r"); // Povežite manipulator sa php.net indeksnom stranicom

Kada završite, datoteku uvijek treba zatvoriti sa fclose ().

Funkcija fclose () zatvara datoteku sa specificiranim ručkom. Vraća TRUE po uspješnom završetku, FALSE u slučaju neuspjeha. Sintaksa za funkciju fclose () je:

int fclose (int manipulator)

Funkcija fclose () uspješno zatvara samo one datoteke koje su prethodno bile otvorene pomoću fopen () ili fsockopen (). Primjer zatvaranja fajla:

$ file = "userdata.txt";

if (file_exists ($ fajl)):

$ fh = fopen ($ datoteka, "r");

// Izvođenje operacija datoteka

print "Datoteka Sfile ne postoji!";

Pišite u fajl

Postoje dvije glavne operacije koje se izvode s otvorenim datotekama - čitanje i pisanje.

Funkcija is_writeable () omogućava vam da provjerite postoji li datoteka i da li je moguće pisati. Provjerava se mogućnost upisivanja i za datoteku i za direktorij. Sintaksa za funkciju is_writeable () je:

bool is_writeable (string fajl)

Jedna važna stvar: PHP će najvjerovatnije raditi pod korisničkim ID-om koji koristi web server (obično "niko"). Za primjer korištenja is_writeable (), pogledajte funkciju fwrite ().

Funkcija fwrite () upisuje sadržaj varijable stringa u datoteku specificiranu u rukohvatu datoteke. Sintaksa za funkciju fwrite () je:

int fwrite (int manipulator, varijabla niza [, int dužina])

Ako je opcijski parametar dužine proslijeđen u pozivu funkcije, snimanje se zaustavlja ili nakon što se upiše navedeni broj znakova ili kada se dostigne kraj reda. Provjera mogućnosti pisanja u datoteku prikazana je u sljedećem primjeru:

// Informacije o prometu na stranici korisnika

$ data = "08: 13: 00 | 12: 37: 12 | 208.247.106.187 | Win98";

$ filename = "somefile.txt";

// Ako datoteka postoji i u nju se može pisati

if (is_writeable ($ filename)):

$ fh = fopen ($ ime datoteke, "a +");

// Upisuje sadržaj $ data u datoteku

$ uspjeh - fwrite ($ fh, $ podaci);

// Zatvori datoteku

fclose ($ fh); ostalo:

print "Nije moguće otvoriti Sfilename za pisanje";

Funkcija fputs () je pseudonim za fwrite () i može se koristiti gdje god se koristi fwrite ().

Funkcija fputs () je pseudonim za fwrite () i ima potpuno istu sintaksu. Sintaksa za funkciju fputs () je:

int fputs (int manipulator, varijabla niza [, int dužina])

Ja lično radije koristim fputs (). Imajte na umu da je ovo samo pitanje stila i da nema nikakve veze s bilo kakvom razlikom između ove dvije funkcije.

Čitanje iz datoteke

Čitanje je nesumnjivo najvažnija operacija koja se izvodi na datotekama. Neke od funkcija koje čine čitanje iz datoteke efikasnijim opisane su u nastavku. Sintaksa ovih funkcija gotovo potpuno kopira sintaksu analognih funkcija pisanja.

Funkcija i s_readable () osigurava da datoteka postoji i da je čitljiva. Čitljivost se provjerava i za datoteku i za direktorij. Sintaksa za is_readable () funkciju je:

boo! is_readable (datoteka niza)

PHP će najvjerovatnije raditi pod korisničkim ID-om koji koristi web server (obično "niko"), tako da da bi is_readable () vratio TRUE, svima mora biti dozvoljeno da čitaju iz datoteke. Sljedeći primjer pokazuje kako osigurati da datoteka postoji i da je čitljiva:

if (is_readable ($ filename)):

// Otvorite datoteku i postavite pokazivač trenutne pozicije na kraj datoteke

$ fh = fopen ($ ime datoteke, "r");

print "$ filename nije čitljivo!";

Funkcija fread () čita određeni broj bajtova iz datoteke koju je specificirao file handle. Sintaksa za funkciju fwrite () je:

int fread (int manipulator, int dužina)

Manipulator se mora pozivati ​​na otvorenu čitljivu datoteku (pogledajte opis funkcije is_readable ()). Čitanje se zaustavlja kada se pročita određeni broj bajtova ili kada se dostigne kraj datoteke. Razmotrite tekstualnu datoteku pastry.txt prikazanu u Listingu 7.1. Čitanje i prikazivanje ove datoteke u pretraživaču se vrši pomoću sljedećeg isječka:

$ fh = fopen ("pastry.txt", "r") ili die ("Ne mogu" otvoriti fajl! ");

$ datoteka = fread ($ fh, veličina datoteke ($ fh));

Koristeći funkciju fllesize () za određivanje veličine pastry.txt u bajtovima, osiguravate da funkcija fread () čita cijeli sadržaj datoteke.

Listing 7.1. Pastry.txt tekstualni fajl

Recept: Testo za pecivo

1 1/4 šolje višenamenskog brašna

3/4 štapića (6 kašika) neslanog putera, iseckanog

2 supene kašike krema za povrće 1/4 kašičice soli

3 kašike vode

Funkcija fgetc () vraća string koji sadrži jedan znak iz datoteke na trenutnoj poziciji pokazivača ili FALSE kada dođe do kraja datoteke. Sintaksa funkcije fgetc () je:

string fgetc (int manipulator)

Manipulator se mora pozivati ​​na otvorenu čitljivu datoteku (pogledajte funkciju is_readable () ranije u ovom poglavlju). Sljedeći primjer pokazuje čitanje i izlaz datoteke znak po znak pomoću funkcije fgetc ():

$ fh = fopen ("pastry.txt", "r"); dok (! feof ($ fh)):

$ char = fgetc ($ fh):

print $ char; endwhile;

Funkcija fgets () vraća string pročitan sa trenutne pozicije pokazivača u datoteci specificiranoj u rukohvatu datoteke. Pokazivač datoteke mora pokazivati ​​na otvorenu čitljivu datoteku (pogledajte funkciju is_readable () ranije u ovom poglavlju). Sintaksa za funkciju fgets () je:

string fgets (int manipulator, int dužina)

Čitanje se zaustavlja kada je ispunjen jedan od sljedećih uslova:

  • dužina čitanja iz datoteke - 1 bajt;
  • znak novog reda je pročitan iz datoteke (uključen u vraćeni niz);
  • znak kraja datoteke (EOF) je pročitan iz datoteke.

Ako želite da organizujete čitanje datoteke red po red, unesite u drugi parametar vrednost koja očigledno premašuje broj bajtova u redu. Primjer čitanja red po red i izlaza datoteke:

$ fh = fopen ("pastry.txt", "r");

dok (! feof ($ fh));

$ line = fgets ($ fh, 4096);

ispis $ line. "
";

Funkcija fgetss () je potpuno slična fgets () sa jednim izuzetkom - pokušava ukloniti sve HTML i PHP oznake iz pročitanog teksta:

string fgetss (Int manipulator, int dužina [, string dozvoljene_oznake])

Prije nego što pređete na primjere, pogledajte sadržaj Listinga 7.2 — ta datoteka se koristi u Listama 7.3 i 7.4.

Listing 7.2. Science.html fajl

Najnovije vijesti - Nauka

Otkriven vanzemaljski oblik života


20. avgusta 2000

Rano jutros, čudan novi oblik gljivice pronađen je kako raste u ormaru starog frižidera u stanu W. J. Gilmorea. Nije poznato da li je snažno zračenje koje izlazi iz kompjuterskog monitora stanara pomoglo u ovoj evoluciji.

Listing 7.3. Uklonite oznake iz HTML datoteke prije prikazivanja u pretraživaču

$ fh = fopen ("science.html", "r");

dok (! feof ($ fh)):

print fgetss ($ fh, 2048);

Rezultat je prikazan ispod. Kao što vidite, sve HTML oznake su uklonjene iz datoteke science.html, što je rezultiralo gubitkom formatiranja:

U nekim situacijama, sve oznake se uklanjaju iz datoteke, osim nekih - na primjer, oznake za prijelom reda
... Listing 7.4 pokazuje kako se to radi.

Listing 7.4. Selektivno uklanjanje oznaka iz HTML datoteke

$ fh = fopenC "science.html", "r");

$ dozvoljeno = "
";

dok (! feof ($ fh)):

print fgetss ($ fh. 2048, $ dozvoljeno);

rezultat:

Najnovije vijesti - Nauka Vanzemaljska životna forma otkrivena 20. avgusta 2000. Rano jutros, u ormaru starog frižidera u stanu WJ Gilmorea pronađen je čudan novi oblik gljivice. Nije poznato da li moćno zračenje izvire iz kompjutera stanara monitor je pomogao u ovoj evoluciji.

Kao što vidite, funkcija fgetss () olakšava pretvaranje datoteka, posebno ako imate mnogo HTML datoteka koje su formatirane na sličan način.

Čitanje datoteke u niz

Funkcija file () učitava cijeli sadržaj datoteke u niz koji se može indeksirati. Svaki element niza odgovara jednom redu datoteke. Sintaksa za funkciju file () je:

datoteka niza (datoteka niza [, int path_include])

Ako je opcioni treći parametar include_path 1, tada je putanja datoteke relativna na direktorij uključivanja naveden u datoteci php.ini (pogledajte poglavlje 1). Listing 7.5 koristi funkciju file () za učitavanje datoteke pastry.txt (pogledajte Listing 7.1).

$ file_array = datoteka ("pastry.txt");

dok (lista ($ line_num. $ linija) = everyt ($ file_array)):

print " Red $ line_num:", htmlspecialchars ($ linija),"
\ n "

Svaki red niza se prikazuje zajedno sa brojem:

Red 0: Recept: Testo za pecivo

Red 1: 1 1/4 šolje višenamenskog brašna

Red 2: 3/4 štapića (6 kašika) neslanog putera, iseckanog

Linija 3: 2 supene kašike biljnog skraćenja

Linija 4: 1/4 kašičice soli

Red 5: 3 supene kašike vode

Preusmjeravanje datoteke na standardni izlaz

Funkcija readfile () čita sadržaj datoteke i usmjerava ga na standardni izlaz (u većini slučajeva u pretraživač). Sintaksa za funkciju readfile () je:

int readfile (datoteka niza [, int path_include])

Funkcija vraća broj pročitanih bajtova. Datoteka se može nalaziti na lokalnom sistemu datoteka, postojati kao standardni I/O tok ili predstavljati datoteku na udaljenom sistemu koju prima HTTP ili FTP. Parametar datoteke postavlja se prema istim pravilima kao u funkciji fopen ().

Pretpostavimo da imate datoteku latorre.txt koju želite da prikažete u pretraživaču:

Restoran "La Torre". smješten u Nettunu, Italija, nudi eklektičan spoj stila. istorija i fina morska kuhinja. Unutar zidina srednjovjekovnog borga koji okružuje grad, možete ručati dok gledate kako prolaznici kupuju u seoskim buticima. Udobnost u kombinaciji sa samo najsvježijim morskim plodovima čine La Torre jednim od najboljih italijanskih restorana.

Kada se izvrši sljedeći isječak, sav sadržaj latorre.txt se prenosi u standardni izlazni tok:

$ restaurant_file = "latorre.txt";

// Pošalji cijeli fajl na standardni izlaz

readfile ($restoran_file);

Otvaranje ručke datoteke procesa

Uz obične datoteke, možete otvoriti manipulatore datoteka za interakciju s procesima na serveru. Problem je riješen funkcijom poren (), koja ima sljedeću sintaksu:

int popen (string komanda, string mod)

Parametar komande definiše sistemsku naredbu koja će se izvršiti, a parametar režima opisuje način pristupa:

// Otvorite datoteku "spices.txt" za pisanje

$ fh = fopen ("spices.txt", "w");

// Dodaj više redova teksta

fputs ($ fh, "Peršun, žalfija, ruzmarin \ n");

fputs ($ fh, "Paprika, so, biber \ n");

fputs ($ fh, "bosiljak, žalfija, đumbir \ n");

// Zatvorite manipulator

// Otvorite UNIX grep proces da pronađete Basil u spices.txt

$ fh - popen ("grep Basil< spices.txt", "r");

// Ispis izlaza grep

Rezultat izgleda ovako:

Bosiljak, žalfija, đumbir

Funkcija fpassthru () je analogna funkciji passthru () o kojoj se govori u odjeljku "Pokretanje vanjskih programa" ovog poglavlja.

Nakon završetka svih operacija, datoteka ili proces moraju biti zatvoreni. Funkcija pclose () zatvara vezu s procesom koji je odredio manipulator, slično kao što funkcija fclose () zatvara datoteku otvorenu funkcijom fopen (). Sintaksa za funkciju pclose () je:

int pclose (int manipulator)

U parametru manipulator manipulator primljen ranije od uspješnog poziva na poren () je proslijeđen.

Otvaranje utičnice

PHP nije ograničen na interakciju sa datotekama i procesima - takođe možete uspostaviti veze preko soketa. Socket(socket) je softverska apstrakcija koja omogućava komunikaciju sa različitim servisima na drugom računaru.

Funkcija fsockopen () uspostavlja vezu utičnice sa serverom na Internetu

preko TCP ili UDP. Sintaksa za funkciju fsockopen () je:

int fsockopen (string čvor, int port [, int error_code [, string error_text [, int timeout]]])

Opcijski parametri error_code i error_text sadrže informacije koje će biti prikazane ako veza sa serverom ne uspije. Oba parametra moraju biti proslijeđena referencom. Treći opcioni parametar, timeout, određuje koliko dugo treba čekati odgovor od servera (u sekundama). Listing 7.6 pokazuje kako koristiti fsockopen () da dobijete informacije o serveru. Međutim, prije nego pogledate Listing 7.6, morate se upoznati s drugom funkcijom, socket_set_blocking ().

UDP (User Datagram Protocol) je komunikacijski protokol bez povezivanja.

socket_set_blocking ()

Funkcija Socket_set_b1ocki ng () vam omogućava da postavite kontrolu vremenskog ograničenja za operacije servera:

socket_set_blocking (int manipulator, boolean način rada)

Parametar manipulatora specificira prethodno otvorenu utičnicu, a parametar načina specificira način na koji je utičnica prebačena (TRUE za način blokiranja, FALSE za neblokirajući način). Primjer korištenja funkcija fsockopen () i socket_set_blocking () prikazan je u Listingu 7.6.

Listing 7.6. Korištenje fsockopen () za dobivanje informacija o serveru

funkcija getthehost ($ host. $ path) (

// Otvaranje veze sa čvorom

$ fp - fsockopen ($ host, 80, & $ errno, & $ errstr, 30);

// Prebacivanje na način blokiranja

socket_set_blocking ($ fp, 1),

// Pošalji zaglavlja

fputs ($ fp, "GET $ path HTTP / 1.1 \ r \ n");

fputs ($ fp, "Host: $ host \ r \ n \ r \ n"); $ x = 1;

// Dobiti zaglavlja

dok ($ x< 10) :

$ zaglavlja = fgets ($ fp, 4096);

// Zatvorite manipulator

getthehost ("www.apress.com", "/");

Listing 7.6 proizvodi sljedeći izlaz:

NTTR / 1.1 200 OK Server: Microsoft-IIS / 4.0 Lokacija sadržaja:

2000. 20:25:06 GMT ETag: "f0a61666dbff1bf1: 34a5" Dužina sadržaja: 1311

Funkcija pfsockopen () je trajna verzija fsockopen (). To znači da se veza neće automatski prekinuti kada završi skripta u kojoj je funkcija pozvana. Sintaksa za funkciju pfsockopen () je:

int pfsockopen (string node, int port [, int error_code [, string text_error [, int timeout]]])

Ovisno o specifičnoj namjeni vaše aplikacije, možda će biti zgodnije koristiti pfsockopen () umjesto fsockopen ().

Pokretanje eksternih programa

PHP skripte takođe mogu da izvršavaju programe koji se nalaze na serveru. Ova funkcija se posebno često koristi kada se sistem administrira putem web pretraživača, kao i za jednostavnije dobijanje sažetih informacija o sistemu.

Funkcija exec () pokreće navedeni program i vraća zadnji red njegovog izlaza. Sintaksa za funkciju exec () je:

string exec (naredba stringa [, niz stringova [, int return]])

Imajte na umu: funkcija exec () samo izvršava naredbu, bez prikaza rezultata njenog rada. Sav izlaz naredbe može se pohraniti u opcijski niz parametara. Dodatno, ako je povratna varijabla također specificirana za dati niz parametara, potonjem se dodjeljuje povratni kod izvršene naredbe.

Listing 7.7 pokazuje kako koristiti funkciju exec () za izvršavanje UNIX sistemske ping funkcije.

Listing 7.7. Provjera veze sa serverom pomoću funkcije exec ().

exec ("ping -c 5 www.php.net", $ ping);

// Na Windows-u - exec ("ping -n 5 www.php.net. $ Ping);

za ($ i = 0; $ i< count($ping);$i++) :

print "
$ ping [$ i] ";

rezultat:

PING www.php.net (208.247.106.187): 56 bajtova podataka

64 bajta od 208.247.106.187: icmp_seq = 0 ttl = 243 vrijeme = 66.602 ms

64 bajta od 208.247.106.187: icmp_seq = 1 ttl = 243 vrijeme = 55,723 ms

64 bajta od 208.247.106.187: icmp_seq = 2 ttl = 243 vrijeme = 70,779 ms

64 bajta od 208.247.106.187: icmp_seq = 3 ttl = 243 vrijeme = 55.339 ms

64 bajta od 208.247.106.187: icmp_seq = 4 ttl = 243 vrijeme = 69.865 ms

Www.php.net ping statistika -

Preneseno 5 paketa. Primljeno 5 paketa. 0% gubitka paketa

povratno min / avg / max / stddev - 55.339 / 63.662 / 70.779 / 6.783 ms

Backticks

Postoji još jedan način za izvršavanje sistemskih naredbi koji ne zahtijeva pozivanje funkcija - naredba koja se izvršava je zatvorena u pozadinske oznake (``), a rezultati njenog rada se prikazuju u pretraživaču. primjer:

print "

$ output
";

Ovaj isječak ispisuje sadržaj direktorija koji sadrži skriptu u pretraživač.

Interni parametar ping -c 5 (-n 5 na Windows-u) specificira broj anketa servera.

Ako samo želite da vratite neformatirane rezultate naredbe, koristite funkciju passthru () opisanu u nastavku.

Funkcija passthru () radi na isti način kao i exec (), s jednim izuzetkom - automatski ispisuje izlaz naredbe. Sintaksa za funkciju passthru () je:

void passthru (naredba niza [, int return])

Ako se pri pozivanju passthru () prosljeđuje opcijski povratni parametar, ovoj varijabli se dodjeljuje povratni kod izvršene naredbe.

escapeshellcmd ()

Funkcija escapeshellcmd () izbjegava sve potencijalno nesigurne znakove koje bi korisnik mogao unijeti (na primjer, u HTML obrazac) da bi izvršio naredbe exec (), passthru (), system () ili pooren (). sintaksa:

string escapeshellcmd (string komanda)

Korisnički unos uvijek treba tretirati s određenim oprezom, ali čak i tada korisnici mogu unijeti komande koje će izvršiti funkcije pokretanja sistemske komande. Razmotrite sljedeći isječak:

$ user_input = `rm -rf *`; // Uklonimo roditeljski direktorij i sve njegove poddirektorije

exec ($ user_input); // Izvrši $ user_input !!!

Ako se ne preduzmu nikakve mjere opreza, takva komanda će dovesti do katastrofe. Međutim, možete koristiti funkcije escapeshellcmd () da izbjegnete korisnički unos:

$ user_input = `rm - rf *`; // Uklonimo roditeljski direktorij i sve njegove poddirektorije

exec (escapeshellcmd ($ user_input)); // Izbjegnite opasne znakove

Funkcija escapeshellcmd () izbjegava znak * kako bi spriječila katastrofalno izvršenje naredbe.

Sigurnost je jedan od najvažnijih aspekata web programiranja, pa sam cijelo poglavlje posvetio ovoj temi i njenom odnosu prema PHP programiranju. Za više informacija pogledajte poglavlje 16.

Rad sa datotečnim sistemom

PHP pruža funkcije za pregled i izvođenje različitih operacija nad datotekama na serveru. Informacije o atributima serverskih datoteka (lokacija, vlasnik i privilegije) su često korisne.

Funkcija osnovno ime () izdvaja ime datoteke iz dostavljenog potpuno kvalificiranog imena. Sintaksa za funkciju basename () je:

osnovno ime niza (puno ime niza)

Ekstrakcija naziva osnovne datoteke iz punog imena je kako slijedi:

$ path = "/usr/local/phppower/htdocs/index.php"; $ datoteka = osnovno ime ($ staza); // $ file = "index.php"

Zapravo, ova funkcija uklanja putanju iz punog imena i ostavlja samo naziv datoteke.

Funkcija getlastmod () vraća datum i vrijeme posljednje izmjene stranice s koje je funkcija pozvana. Sintaksa za getlastmod () funkciju je:

int getlastmod (void)

Povratna vrijednost je u UNIX formatu datuma/vremena i može se formatirati pomoću funkcije datuma (). Sljedeći isječak prikazuje datum posljednje izmjene stranice:

echo "Posljednja izmjena:" .date ("H: i: s a". getlastmod ());

Funkcija stat () vraća niz koji se može indeksirati s detaljnim informacijama o datoteci s datim imenom:

niz stat (string ime datoteke)

Sljedeće informacije se vraćaju u elementima niza:

0 Izgradnja

2 Inode zaštitni način

3 Broj linkova

4 ID korisnika

5 ID grupe vlasnika

6 Tip Inode uređaja

7 Veličina u bajtovima

8 Vrijeme posljednjeg pristupa

9 Vrijeme posljednje izmjene

10 Vrijeme posljednje promjene

11 Veličina bloka za I/O u sistemu datoteka

12 Broj dodijeljenih blokova

Stoga, ako želite znati vrijeme posljednjeg pristupa datoteci, pogledajte element 8 vraćenog niza. Razmotrimo primjer:

$ datoteka - "datafile.txt";

lista ($ dev, $ inode, $ inodep, $ nlink, $ uid, $ gid, $ inodev, $ size, $ atime, $ mtime, $ ctime,

$ bsize) = stat ($ fajl);

print "$ datoteka je $ veličine bajtova.
";

print "Vrijeme posljednjeg pristupa: $ atime
";

print "Vrijeme posljednje izmjene: $ mtime
";

rezultat:

popen.php ima 289 bajtova.

Vrijeme posljednjeg pristupa: 15. avgust 2000. 12:00:00

Vrijeme posljednje izmjene: 15. avgust 2000. 10:07:18

U ovom primjeru, koristio sam konstrukciju liste () da imenujem svaku povratnu vrijednost. Naravno, isto tako možete vratiti niz, iterirati elemente u petlji i prikazati sve potrebne informacije. Kao što vidite, funkcija stat () pruža razne korisne informacije o datoteci.

Prikaz i promjena karakteristika datoteke

Svaki fajl na UNIX sistemima ima tri važne karakteristike:

  • pripadnost grupi;
  • vlasnik;
  • dozvole.

Sve ove karakteristike mogu se promijeniti korištenjem odgovarajućih PHP funkcija. Funkcije opisane u ovom odeljku ne rade na sistemima iz porodice Windows.

Ako ste novi u UNIX operativnim sistemima, informacije o specifikacijama UNIX sistema datoteka mogu se naći na http://sunsite.auc.dk/linux-newbie/FAQ2.htm. Teme članstva u grupi, vlasništva i dozvola razmatrane su u odjeljku 3.2.6.

Funkcija chgrp () pokušava promijeniti grupu kojoj navedena datoteka pripada. Sintaksa za funkciju chgrp () je:

int chgrp (naziv datoteke, mješovita grupa)

Funkcija filegroup () vraća ID grupe vlasnika datoteke sa datim imenom, ili FALSE u slučaju greške. Sintaksa za funkciju filegroup () je:

int filegroup (string ime datoteke)

Funkcija chmod () mijenja dozvole datoteke s datim imenom. Sintaksa za chmod () funkciju je:

int chmod (string ime datoteke, int dozvole)

Dozvole su u oktalnom obliku. Specifičnosti postavljanja parametra funkciji chmod () prikazane su u sljedećem primjeru:

chmod ("data_datoteka.txt", g + r); // Ne radi

chmod ("data_file.txt", 766); // Ne radi

chmod ("data_file.txt", 0766); // Working

Fileperms () funkcija vraća dozvole datoteke sa navedenim imenom, ili FALSE u slučaju greške. Sintaksa za fileperms () funkciju je:

int fileperms (string ime datoteke)

Funkcija chown () pokušava promijeniti vlasnika datoteke. Samo privilegovani korisnik ima pravo da promeni vlasnika fajla. Sintaksa za funkciju chown () je:

int chown (naziv datoteke, mješoviti korisnik)

Funkcija fileowner () vraća korisnički ID vlasnika datoteke sa datim imenom. Sintaksa za funkciju vlasnika datoteke () je:

int vlasnik datoteke (string ime datoteke)

Kopiranje i preimenovanje fajlova

Ostale korisne sistemske funkcije koje PHP skripte mogu da obavljaju uključuju kopiranje i preimenovanje datoteka na serveru. Ove operacije izvode dvije funkcije: leglo () i preimenuj ().

Kopiranje datoteke u PHP skriptu nije ništa teže od korištenja UNIX naredbe cf. Zadatak je riješen PHP funkcijom sopu (). Sintaksa za funkciju copu () je:

int kopija (izvor niza, odredište niza)

Funkcija copu () pokušava kopirati izvornu datoteku u odredišnu datoteku; vraća TRUE u slučaju uspjeha i FALSE u slučaju neuspjeha. Ako odredišna datoteka ne postoji, kreira je funkcija leglo (). Sljedeći primjer pokazuje kako napraviti sigurnosnu kopiju datoteke pomoću funkcije copu ():

$ data_file = "datal.txt";

copy ($ data_file. $ data_file ".bak") ili die ("Nije moguće kopirati $ data_file");

Funkcija preimenuj () preimenuje datoteku. Vraća TRUE u slučaju uspjeha i FALSE u slučaju neuspjeha. Sintaksa za funkciju preimenovanja () je:

bool preimenuj (niz staro_ime, niz novo_ime)

Primjer preimenovanja datoteke s funkcijom preimenovanja ():

$ data_file = "datal.txt";

preimenuj ($ data file, $ datafile ".old") ili die ("Ne mogu preimenovati $ datafile");

Brisanje fajlova

Funkcija unlink () uklanja datoteku sa datim imenom. sintaksa:

int unlink (datoteka niza)

Ako koristite PHP na Windows sistemu, ponekad se javljaju problemi prilikom korištenja ove funkcije. U ovom slučaju, možete koristiti gore opisanu sistemsku () funkciju i izbrisati datoteku naredbom DOS del:

sistem ("del ime datoteke.txt");

Rad sa imenicima

PHP funkcije vam omogućavaju da vidite i navigirate sadržajem direktorija. Listing 7.8 prikazuje tipičnu strukturu UNIX direktorija.

Listing 7.8. Tipična struktura direktorija

Funkcija dirname () dopunjuje basename () kako bi izdvojila putanju iz potpuno kvalificiranog imena datoteke. Sintaksa za funkciju dirname () je:

string dirname (puta niza)

Primjer korištenja dirname () za izdvajanje putanje iz potpuno kvalificiranog imena:

$ path = "/usr/locla/phppower/htdocs/index.php";

$ datoteka = dirname ($ put); // $ file = "usr / local / phppower / htdocs"

Funkcija dirname () se ponekad koristi u sprezi sa varijablom $ SCRIPT_FILENAME da bi se dobila puna putanja do skripte iz koje se naredba izvodi:

$ dir - dirname ($ SCRIPT_FILENAME);

Is_dir () funkcija provjerava da li je datoteka s datim imenom direktorij:

bool is_dir (string ime datoteke)

Sljedeći primjer koristi strukturu direktorija iz Listinga 7.8:

$ isdir = is_dir ("index.html"); // Vraća FALSE

$ isdir = is_dir ("knjiga"); // Vraća TRUE

Funkcija mkdir () radi isto što i UNIX naredba istog imena — kreira novi direktorij. Sintaksa za funkciju mkdir () je:

int mkdir (puta niza, int mod)

Parametar putanje definira putanju za kreiranje novog direktorija. Ne zaboravite završiti parametar imenom novog direktorija! Parametar načina određuje dozvole koje će se dodijeliti kreiranom direktoriju.

Baš kao što funkcija fopen () otvara manipulator za manipulaciju navedenom datotekom, opendir () funkcija otvara manipulator za manipulaciju direktorijumom. Sintaksa za funkciju opendir () je:

int opendir (putanja niza)

Closeir () funkcija zatvara ručku direktorija proslijeđenu kao parametar. Sintaksa za Closeir () funkciju je:

void closeir (int dir_manipulator)

Funkcija readdir () vraća sljedeći unos u navedenom direktoriju. sintaksa:

string readdir (int dir_manipulator)

Pomoću ove funkcije možete jednostavno ispisati sve datoteke i poddirektorije u trenutnom direktoriju:

$ dh = opendir (".);

dok ($ fajl = readdir ($ dh)):

ispisati "$ fajl
"; kraj;

Funkcija chdir () radi isto kao naredba UNIX cd — navigira do direktorija specificiranog parametrom. Sintaksa za funkciju chdir () je:

int chdir (direktorij nizova)

U sljedećem primjeru idemo na knjigu / poddirektorij i prikazujemo njegov sadržaj:

$ newdir = "knjiga";

chdir ($ newdir) ili die ("Nije moguće promijeniti u direktorij ($ newdir)"); $ dh = opendir (".");

while ($ file = readdir ($ dh));

ispisati "$ fajl
";

Funkcija rewlnddir () pomiče pokazivač trenutne pozicije na početak direktorija koji otvara funkcija opendir (). Sintaksa za funkciju rewinddir () je:

void rewinddir (int dir_nip)

Projekat 1: jednostavan brojač pogodaka

Skripta predstavljena u ovom odjeljku broji broj posjeta stranici na kojoj se nalazi. Prije nego pređete na kod u Listingu 7.9, pregledajte algoritam pseudokoda:

  1. Postavite varijablu pristupa $ na ime datoteke u kojoj će biti pohranjena vrijednost brojača.
  2. Koristite funkciju file () da pročitate sadržaj $ pristupa u niz $ visits. Prefiks @ ispred naziva funkcije potiskuje moguće greške (na primjer, odsustvo datoteke sa datim imenom).
  3. Postavite varijablu $ current_visitors na prvi (i jedini) element u nizu $ visits.
  4. Povećajte vrijednost $ current_visitors za 1.
  5. Otvorite pristup fajlu $ za pisanje i postavite pokazivač trenutne pozicije na početak datoteke.
  6. Upišite vrijednost $ current_visitors u datoteku $ access.
  7. Zatvorite ručku koja upućuje na pristup $.

Listing 7.9. Jednostavan brojač pogodaka

// Scenario: jednostavan brojač pogodaka

// Svrha: čuvanje broja pogodaka u datoteci

$ access = "hits.txt"; // Ime datoteke se bira proizvoljno

$ current_visitors = $ posjeta; // Dohvati prvu (i jedinu) stavku

++ $ current_visitors; // Povećaj brojač pogodaka

$ fh = fopen ($ pristup. "w"); // Otvorite hits.txt datoteku i instalirajte

// pokazivač trenutne pozicije na početak datoteke

@fwrite ($ fh, $ current_visitors); // Upisuje novu vrijednost brojača

// na fajl "hits.txt"

fclose ($ fh); // Zatvori rukohvat datoteke "hits.txt"

Projekat 2: izrada mape sajta

Skripta u Listingu 7-10 gradi mapu sajta — hijerarhijski prikaz svih fascikli i datoteka na serveru, počevši od datog direktorijuma. Prilikom izračunavanja uvlačenja elemenata koji čine mapu stranice koriste se funkcije definirane u ovom i prethodnim poglavljima. Prije nego pređete na program, pregledajte algoritam napisan u pseudokodu:

  1. Deklarirajte servisne varijable za pohranjivanje roditeljskog direktorija, imena grafičke datoteke sa slikom mape, naziva stranice i zastavice OS servera (Windows ili drugi sistem).
  2. Deklarirajte funkciju display_directory () koja čita sadržaj direktorija i formatira ga za prikaz u pretraživaču.
  3. Izgradite putanju direktorija spajanjem imena proslijeđenog u varijablu $ dir1 sa $ dir.
  4. Otvorite direktorij i pročitajte njegov sadržaj. Formatirajte nazive direktorija i datoteka i prikažite ih u pretraživaču.
  5. Ako je trenutna datoteka direktorij, rekurzivno pozovite display_di funkciju rectory () i proslijedite joj ime novog direktorija za prikaz. Izračunajte uvlačenje korišteno pri formatiranju izlaza.

Ako datoteka nije direktorij, formatira se tako da bude prikazana kao hiperveza (i izračunava se i uvlačenje korišteno za formatiranje).

Listing 7.10. Sitemap.php program

// Datoteka: sitemap.php

// Svrha: izrada sitemapa

// Direktorij iz kojeg se počinje graditi mapa

$ beg_path = "C: \ Programske datotekeVApache grupa \ Apache \ htdocs \ phprecipes";

// Fajl sa grafičkom slikom foldera.

// Put mora biti postavljen u odnosu na * korijenski direktorij Apache servera

$ folder_location = "C: \ Moji dokumenti \ PHP za programere \ FINAL CHPS \ grafika \ folder.gif";

// Tekst u naslovu prozora $ page_name = "PHPRecipes SiteMap";

// Hoće li se skripta koristiti na Linuxu ili Windowsu?

// (0 - Windows; 1 - Linux)

$ usingjinux = 0;

// Funkcija: display_directory

// Svrha: čitanje sadržaja direktorija specificiranog parametrom

// $ dir1, nakon čega slijedi formatiranje direktorija i hijerarhije datoteka.

// Funkcija se može pozvati rekurzivno.

funkcija display_directory ($ dir1, $ folder_location, $ using_linux, $ init_depth) (

// Putanja ažuriranja

Sdh = opendir ($ dir);

dok ($ fajl = readdir ($ dh)):

// Stavke direktorija "." i ".." nisu prikazani.

if (($ fajl! = ".") && ($ fajl! = "..")):

ako ($ using_linux == 0):

$dubina = eksplodirati ("\\", $dir): inače:

$ dubina = eksplodirati ("/", $ dir); endif; $ curtent_depth = sizeof ($ dubina);

// Izgradite putanju prema pravilima operativnog sistema koji se koristi. ako ($ using_linux == 0):

$ tab_depth = $ current_deptn - $ init_depth;

$ fajl = $ dir. "\\", $ fajl; ostalo:

$ fajl = $ dir. "/", $ datoteka; endif;

// Da li varijabla datoteke $ sadrži direktorij? if (je dir ($ fajl)):

// Izračunaj uvlaku

dok ($ x< ($tab_depth * 2)) :

$ x ++; endwhile;

print "

".basename ($ fajl)."
";

// Povećaj brojač

// Rekurzivno pozivamo funkciju display_directory ().

display_directory ($ datoteka, $ folder_location, $ using_linux, $ init_depth);

// Direktorij He

// Izgradite putanju prema korištenim pravilima

// operativni sistem.

ako ($ using_linux == 0):

$ tab_depth = ($ trenutna_dubina - $ init_depth) - 2; $ x = 0;

// Izračunaj uvlaku

dok ($ x< (($tab_depth * 2) + 5)) :

print " ".basename ($ fajl)."
";

print " ".basename ($ fajl)."
";

endif; // Is_dir (fajl) endif: // Ako! "." ili ".."

// Zatvori direktorij closeir ($ dh);

<? print "$page_name"; ?>

// Izračunajte početni padding

ako ($ using_linux == 0):

$dubina = eksplodirati ("\\", $ beg_path);

$ dubina = eksplodirati ("/", $ beg_path);

$ init_depth = sizeof ($ dubina);

display_directory ($ beg_path, $ folder_location, $ using_linux, $ init_depth);

Na sl. 7.1 prikazuje izlaz skripte za direktorij sa nekoliko poglavlja u ovoj knjizi.

Rice. 7.1. Prikaz strukture direktorija na serveru pomoću skripte sitemap.php

Ishodi

Ovo poglavlje uvodi mnoge PHP alate za rad sa datotekama. Konkretno, razmatrali smo sljedeća pitanja:

  • provjera postojanja datoteka;
  • otvaranje i zatvaranje datoteka i I/O tokova;
  • pisanje i čitanje iz datoteke;
  • preusmjeravanje datoteke na izlazni tok;
  • pokretanje eksternih programa;
  • operacije sistema datoteka.

Ovo poglavlje je postavilo scenu za sljedeće poglavlje, "Stringovi i regularni izrazi", jer su rukovanje stringovima i I/O vrlo blisko povezani u web razvoju.

Posljednje ažurirano: 1.11.2015

Kao i većina programskih jezika, PHP podržava rad sa datotekama, što je jedan od načina pohranjivanja informacija.

Čitanje i pisanje datoteka

Otvaranje i zatvaranje datoteka

PHP definira funkciju fopen () za otvaranje datoteka. Ima sljedeću definiciju: resurs fopen (string $ ime datoteke, string $ mod). Prvi parametar, $ filename, predstavlja putanju do datoteke, a drugi, otvoreni način. Ovisno o svrsi otvaranja i vrsti datoteke, ovaj parametar može imati sljedeće vrijednosti:

    "r": Datoteka se otvara samo za čitanje. Vraća false ako datoteka ne postoji

    "r +": Datoteka se otvara samo za čitanje sa mogućnošću pisanja. Vraća false ako datoteka ne postoji

    "w": datoteka je otvorena za pisanje. Ako takav fajl već postoji, onda se prepisuje, ako ne, onda se kreira.

    "w +": Datoteka je otvorena za pisanje i čitljiva. Ako takav fajl već postoji, onda se prepisuje, ako ne, onda se kreira.

    "a": datoteka je otvorena za pisanje. Ako takva datoteka već postoji, podaci se upisuju na kraj datoteke, a stari podaci ostaju. Ako datoteka ne postoji, onda je kreirana

    "a +": Fajl se otvara za čitanje i pisanje. Ako datoteka već postoji, podaci se dodaju na kraj datoteke. Ako datoteka ne postoji, onda je kreirana.

Funkcija fopen vraća deskriptor datoteke. Ova ručka se koristi za operacije datoteka i za zatvaranje.

Nakon završetka rada, datoteka se mora zatvoriti pomoću funkcije fclose (), koja kao parametar uzima deskriptor datoteke. Na primjer, otvorimo i zatvorimo datoteku:

$ fd = fopen ("form.php", "r") ili die ("nije moguće otvoriti datoteku"); fclose ($ fd);

Konstrukcija or die ("tekst greške") omogućava vam da prekinete skriptu i prikažete neku poruku o grešci ako funkcija fopen ne može otvoriti datoteku.

Čitanje fajla

Za čitanje datoteke može se koristiti nekoliko funkcija. Za čitanje red po red koristi se funkcija fgets (), koja prima deskriptor datoteke i vraća jedan pročitan red. Prođimo kroz cijeli fajl red po red:

Svaki put kada se pozove fgets (), PHP će postaviti pokazivač na kraj reda koji je pročitao. Za praćenje kraja datoteke koristi se funkcija feof (), koja vraća true kada se datoteka završi. Dok se ne dostigne kraj datoteke, možemo koristiti funkciju fgets ().

Čitanje cijele datoteke

U ovom slučaju, ne moramo eksplicitno otvoriti datoteku, dobiti deskriptor, a zatim zatvoriti datoteku.

Blokiraj čitanje

Također možete izvršiti čitanje blok po blok, odnosno čitanje određenog broja bajtova iz datoteke pomoću funkcije fread ():

Funkcija fread () uzima dva parametra: deskriptor datoteke za čitanje i broj bajtova za čitanje. Kada se blok pročita, pokazivač datoteke se pomiče na kraj tog bloka. I pomoću funkcije feof () možete pratiti završetak datoteke.

Snimanje fajla

Za pisanje datoteke koristi se funkcija fwrite (), koja upisuje liniju u datoteku:

Druga funkcija fputs () radi slično:

Rad sa pokazivačem datoteke

Kada se datoteka otvori za čitanje ili pisanje u "w" modu, pokazivač datoteke se postavlja na početak. Kada čita podatke, PHP pomera pokazivač datoteke na kraj čitanog bloka podataka. Međutim, možemo i ručno manipulirati pokazivačem datoteke i postaviti ga na proizvoljnu lokaciju. Da biste to učinili, koristite funkciju fseek, koji ima sljedeću formalnu definiciju:

Int fseek (resurs $ handle, int $ offset [, int $ odakle = SEEK_SET])

Parametar $ handle predstavlja ručku datoteke. Parametar $ offset je pomak u bajtovima u odnosu na početak datoteke iz koje će početi čitanje/pisanje. Treći opcioni parametar određuje kako se postavlja pomak. Može imati tri vrijednosti:

    SEEK_SET: zadana vrijednost, postavlja pomak u offset bajtovima od početka datoteke

    SEEK_CUR: postavlja pomak u offset bajtovima od početka trenutne pozicije u datoteci

    SEEK_END: ​​postavlja pomak bajtova od kraja datoteke

Ako je pokazivač uspješno postavljen, funkcija fseek () vraća 0, a ako je neuspješna, vraća -1.

Primjer korištenja funkcije:

$ fd = fopen ("hello.txt", "w +") ili die ("nije mogao otvoriti fajl"); $ str = "Zdravo svijete!"; // string za pisanje fwrite ($ fd, $ str); // upisujemo string na početak fseek ($ fd, 0); // stavi pokazivač datoteke na početak fwrite ($ fd, "Oink"); // upisujemo na početak reda fseek ($ fd, 0, SEEK_END); // stavlja pokazivač na kraj fwrite ($ fd, $ str); // dodaj još jedan red na kraju fclose ($ fd);

Top srodni članci