Provjera postojanja datoteke. Kako provjeriti postojanje datoteke u PHP-u

Postoje trenuci kada morate provjeriti postoji li navedena datoteka ili ne, na primjer, kako bi naknadno izvršili neke radnje s datotekom.

Također sam naišao na ovaj problem prilikom razvoja modula. I pronašao sam dvije opcije za rješavanje problema.

Provjera postojanja datoteke pomoću URL veze

U PHP-u postoji funkcija " fopen", koji se može koristiti za otvaranje navedenog URL-a.

Što radimo? Pokušavamo otvoriti datoteku, i ako uspijemo, onda datoteka postoji, u suprotnom, datoteka ne postoji.

Implementacija:

Ali što ako nemamo jednu datoteku, već nekoliko, da tako kažem, niza poveznica? Upravo je to zadatak koji je stajao preda mnom od samog početka. A rješenje ovog problema je sljedeće:

U ovom slučaju dobivamo popis samo onih datoteka koje postoje.

Provjera postojanja lokalne datoteke

Riječ "lokalno" znači da se skripta i datoteke za provjeru nalaze na istom poslužitelju. Ako imate dovoljno veliki niz linkovi - ova opcija je najbolja za rješavanje problema, budući da ne postavljamo zahtjev za poslužitelj treće strane, ali skeniranje navedenih direktorija.

Ova metoda koristi funkciju "file_exists" i slične prethodna verzija samo zamijenite dio skripte:

I isto za niz veza:

Koliko to vrijedi Bilješka? Činjenica da je ova metoda prikladna za pokretanje datoteka koje se nalaze unutar našeg sustav datoteka. Stoga je preporučljivo sve poveznice označiti kao relativne.

Usput, prilikom izrade jedne od narudžbi, upravo sam ovom metodom uspio skenirati oko 135.000 datoteka u samo nekoliko sekundi.

Potreban parametar za ovu funkciju je ime putanje, koji navodi stazu do direktorija koji treba stvoriti.

mkdir( "nova mapa" );

Ako navedete mapu na ovaj način, ona će biti kreirana u istom direktoriju iz kojeg je pokrenuta PHP skripta. Ako trebate stvoriti imenik na drugom mjestu, možete navesti relativni put u mapu koju želite izraditi ili navedite puni put iz korijenskog direktorija stranice.

mkdir( "../nova mapa" ); // jednu razinu niže

mkdir("/mapa1/mapa2/nova mapa"); // puni put

U posljednjem primjeru preduvjet postojat će poddirektorije "folder1" i "folder2". Ako ih nema, funkcija u ovom obrascu neće moći stvoriti mapu i vratit će pogrešku:

Upozorenje: mkdir() : Nema takve datoteke ili direktorija u …

Ako je uspješna, funkcija se vraća vrijednost Istina. Ako paket nije kreiran, vraća se False.

if (mkdir("nova mapa"))
jeka "Mapa je uspješno kreirana";
drugo
jeka "Mapa nije stvorena";

Ali ne biste trebali koristiti ovu funkciju bez provjere prisutnosti mape, budući da će poslužitelj i dalje prikazati pogrešku da se mapa ne može stvoriti.

Dodjela prava prilikom izrade mape

Drugi izborni parametar funkcije mkdir odgovoran je za dodjelu prava stvorenoj mapi. Prema zadanim postavkama dodijeljene su maksimalne privilegije – 0777.

Dopuštenja se dodjeljuju kao oktalna vrijednost s obaveznom vodećom nulom. Osim prve nule, brojevi predstavljaju razine pristupa za vlasnika, za vlasničku grupu, za sve ostale.

0 – pristup odbijen;

1 – pristup čitanju;

2 – pristup za pisanje;

4 – pristup izvršenju.

Najčešće se prava navode kao zbirni iznos, na primjer:

7 – puni pristup (1+2+4);

5 – čitanje i izvođenje (1+4).

mkdir( "nova mapa" , 0777); // potpuni pristup za sve

Stvaranje više ugniježđenih poddirektorija

Možete stvoriti nekoliko podmapa odjednom jednostavnim navođenjem još jednog izbornog Booleovog parametra – rekurzivnog.

mkdir("mapa1/mapa2/nova mapa" , 0777, Istina ); // potpuni pristup za sve

U tom slučaju, ako ne postoje mape "folder1" i "folder2", funkcija će stvoriti i njih i mapu "newfolder". Ako se ne pojave drugi problemi, neće se prikazati poruke o pogrešci i funkcija će vratiti True.

Brisanje mape

Prazna mapa u PHP-u može se izbrisati pomoću funkcije rmdir. Parametar dirname također navodi puni ili relativni put do direktorija koji se briše:

rmdir( "moja mapa");

rmdir("mapa1/mapa2/moja mapa");

U svakom od ovih slučajeva briše se samo mapa "myfolder". Ako nema mape ili je putanja netočno navedena, prikazat će se pogreška:

Upozorenje: rmdir(myfolder): Nema takve datoteke ili direktorija u …

Brisanje mape koja nije prazna

Brisanje direktorija koji nije prazan vrši se uzastopnim brisanjem poddatoteka u mapi s funkcijom prekida veze, a zatim brisanjem prazna mapa funkcija rmdir. Za ovo možete koristiti funkciju poput ove:

funkcija my_delete_dir($mypath)(
$dir = opendir($mypath);
dok (($file = readdir($dir)))(
if (is_file($mypath."/" .$file))
prekini vezu ($mypath. "/" .$datoteka);
elseif (is_dir($mypath."/" .$file) && ($file != "." ) && ($file != ".." ))
my_delete_dir($mypath."/" .$file);
}
zatvorendir($dir);
rmdir($mypath);
}

my_delete_dir("moja mapa"); // poziv funkcije

Provjera postojanja imenika

Prije većine operacija s imenicima, vrijedi provjeriti postoje li oni. Za to se koristi funkcija file_exists.

Osim toga, morate biti sigurni da je navedeni objekt mapa, a ne datoteka - funkcija is_dir. Mapa koja se skenira određena je relativnom ili punom stazom.

if (file_exists("myfolder"))
jeka "Navedena mapa postoji";
drugo
jeka "Navedena mapa ne postoji";

if (je_dir("moja mapa"))
jeka "Navedeni objekt mape";
drugo
jeka "Navedeni objekt nije mapa";

Raširena uporaba baza podataka nije učinila konvencionalni sustav datoteka nevažnim. Pisanje i čitanje datoteka i dalje traje značajno mjesto u programiranju.

Algoritmi za provjeru prisutnosti datoteke omogućuju vam da izbjegnete pogreške prilikom izvršavanja koda. PHP file_exists funkcija nudi jednostavno rješenje za provjeru postojanja datoteke ili direktorija.

Sintaksa i upotreba funkcije file_exists

Rezultat funkcije je istinit ili lažan. Jedini parametar je naziv datoteke i put do nje. Rezultat funkcije je predmemoriran jer ako PHP file_exists ne radi, ali datoteka stvarno postoji, onda je to pogreška algoritma.

Korištenjem funkcije clearstatcache() možete izbjeći mnoge zamke u ispitivanju stanja dostupnog datotečnog sustava. Ali treba imati na umu da na nepostojeći PHP datoteka file_exists će vratiti false dok se dotična datoteka ne stvori, a zatim će vratiti true čak i kada je već izbrisana.

Ispravna kombinacija funkcije clearstatcache() i funkcija povezanih sa datotečnim sustavom (na primjer, is_writable(), is_readable(), is_executable(), is_file(), is_dir() i druge) omogućuje vam da izbjegnete "skriveno" izvršavanje skripte pogreške.

Predmemoriranje značajno poboljšava performanse sustava, ali u nekim slučajevima važne datoteke može stvoriti doista nepouzdan rezultat i uzrokovati ozbiljnu pogrešku tijekom izvođenja koju je teško otkriti.

Parametar PHP funkcije file_exists

PHP se može instalirati na različite računalne platforme, pa stoga put i naziv datoteke mogu biti različiti.

U dokumentaciji stoji da kada PHP provjera fokusira se na UID/GID, a ne na učinkovite identifikatore. Razvijanje algoritma koristeći PHP file_exists, trebali biste obratiti pozornost ne samo na ispravne kose crte (naprijed ili unatrag), kodiranje staze do datoteke i naziv same datoteke, već i provjeriti prisutnost potrebnih malih i velikih slova, ispravne znakove, prava pristupa i druge okolnosti.

Na negativan rezultat To može utjecati na kodiranje datoteke skripte i možda će biti potrebno pretvoriti niz znakova dohvaćen iz baze podataka.

Korištenje funkcije u praksi

Područja upotrebe PHP skripte bitno razlikuju. To ne znači da se PHP file_exists koristi isključivo za pohranu informacije o sustavu, podatkovne datoteke, objekte ili dinamički generirane slike.

Česti su slučajevi korištenja formacije potoka velike količine privremene informacije koje nije učinkovito odmah smjestiti u bazu podataka. Informacije od različitih posjetitelja mogu teći na stranicu, i to samo nakon prethodne obrade u određenom vremenskom razdoblju potrebne informacije moraju se smjestiti u tablice baze podataka.

Čitanje sistemske datoteke može uzrokovati predmemoriju kada se stranica više puta osvježava, ili pogrešne radnje posjetitelj. Postoji dosta situacija u stvarnosti, ali pravilnu upotrebu funkcije omogućuje vam pisanje sigurnog i pouzdanog koda.

Postoje trenuci kada morate provjeriti postoji li navedena datoteka ili ne, na primjer, kako biste naknadno izvršili neke radnje na datoteci.

Također sam naišao na ovaj problem prilikom razvoja modula. I pronašao sam dvije opcije za rješavanje problema.

Provjera postojanja datoteke pomoću URL veze

U PHP-u postoji funkcija " fopen", koji se može koristiti za otvaranje navedenog URL-a.

Što radimo? Pokušavamo otvoriti datoteku, i ako uspijemo, onda datoteka postoji, u suprotnom, datoteka ne postoji.

Implementacija:

Ali što ako nemamo jednu datoteku, već nekoliko, da tako kažem, niza poveznica? Upravo je to zadatak koji je stajao preda mnom od samog početka. A rješenje ovog problema je sljedeće:

U ovom slučaju dobivamo popis samo onih datoteka koje postoje.

Provjera postojanja lokalne datoteke

Riječ "lokalno" znači da se skripta i datoteke za provjeru nalaze na istom poslužitelju. Ako imate prilično veliki niz poveznica, ova opcija je najbolja za rješavanje problema, budući da ne šaljemo zahtjev poslužitelju treće strane, već skeniramo navedene direktorije.

Ova metoda koristi funkciju “file_exists” i, analogno prethodnoj opciji, jednostavno zamjenjuje dio skripte:

I isto za niz veza:

Koliko to vrijedi Bilješka? Činjenica da je ova metoda prikladna za pokretanje datoteka koje se nalaze unutar našeg datotečnog sustava. Stoga je preporučljivo sve poveznice označiti kao relativne.

Usput, prilikom izrade jedne od narudžbi, upravo sam ovom metodom uspio skenirati oko 135.000 datoteka u samo nekoliko sekundi.