Verificați prezența fișierului php. Parametrul funcției PHP file_exists. Verificarea existenței unui fișier local

Parametrul necesar pentru această funcție este calea, care specifică calea către directorul care urmează să fie creat.

mkdir( "dosar nou" );

Dacă specificați folderul în acest fel, acesta va fi creat în același director din care a fost lansat scriptul PHP. Dacă trebuie să creați directorul într-o locație diferită, puteți specifica cale relativăîn folderul care urmează să fie creat sau specificați calea completă din directorul rădăcină al site-ului.

mkdir( "../dosar nou" ); // un nivel mai jos

mkdir("/folder1/folder2/newfolder"); // cale completă

În ultimul exemplu condiție prealabilă va exista existenta subdirectoarelor „folder1” si „folder2”. Dacă nu sunt acolo, funcția din acest formular nu va putea crea folderul și va returna o eroare:

Avertisment: mkdir(): Nu există un astfel de fișier sau director în...

Dacă are succes, funcția returnează True. Dacă pachetul nu a fost creat, este returnat False.

if (mkdir(„folder nou”))
ecou „Folderul creat cu succes”;
altfel
ecou „Folderul nu a fost creat”;

Dar nu ar trebui să utilizați această funcție fără a verifica prezența unui folder, deoarece serverul va afișa în continuare o eroare că folderul nu a putut fi creat.

Atribuirea drepturilor la crearea unui folder

Pentru atribuirea drepturilor la folderul care se creează Al doilea parametru opțional al funcției mkdir corespunde. În mod implicit, privilegiile maxime sunt atribuite – 0777.

Permisiunile sunt atribuite ca valoare octală cu un zero obligatoriu înainte. În afară de primul zero, numerele reprezintă niveluri de acces pentru proprietar, pentru grupul proprietarului, pentru toți ceilalți.

0 – acces refuzat;

1 – acces la citire;

2 – acces la scriere;

4 – acces la execuție.

Cel mai adesea, drepturile sunt specificate ca o sumă compusă, de exemplu:

7 – acces complet (1+2+4);

5 – citire și execuție (1+4).

mkdir( „folder nou”, 0777); // acces complet pentru toată lumea

Crearea mai multor subdirectoare imbricate

Puteți crea mai multe subfoldere simultan, prin simpla specificare a unui alt parametru boolean opțional – recursiv.

mkdir("folder1/folder2/newfolder" , 0777, True ); // acces complet pentru toată lumea

În acest caz, dacă nu există foldere „folder1” și „folder2”, funcția le va crea atât, cât și folderul „newfolder”. Dacă nu apar alte probleme, nu vor fi afișate mesaje de eroare și funcția va returna True.

Ștergerea unui folder

Un folder gol în PHP poate fi șters folosind funcția rmdir. Parametrul dirname specifică, de asemenea, calea completă sau relativă către directorul de șters:

rmdir( "fisierul meu" );

rmdir("folder1/folder2/myfolder");

În fiecare dintre aceste cazuri, doar folderul „myfolder” este șters. Dacă nu există niciun folder sau calea este specificată incorect, va fi afișată o eroare:

Avertisment: rmdir(myfolder): Nu există un astfel de fișier sau director în...

Ștergerea unui folder care nu este gol

Ștergerea unui director care nu este gol se face prin ștergerea secvențială a subfișierelor din folder cu funcția de deconectare și apoi ștergerea folder gol funcția rmdir. Puteți utiliza o funcție ca aceasta pentru a face acest lucru:

funcția my_delete_dir($mypath)(
$dir = opendir($mypath);
în timp ce (($fișier = readdir($dir)))(
dacă (este_fișier($mypath."/" .$fișier))
deconectați($mypath. „/” .$fișier);
elseif (este_dir($mypath."/" .$fișier) && ($fișier != "." ) && ($fișier != ".." ))
my_delete_dir($mypath."/" .$file);
}
closedir($dir);
rmdir($mypath);
}

my_delete_dir("dosarul meu"); // apel de funcție

Verificarea existenței unui director

Înainte de majoritatea operațiunilor cu directoare, merită să verificați dacă acestea există. Funcția file_exists este folosită pentru aceasta.

În plus, trebuie să vă asigurați că obiectul specificat este un folder și nu un fișier - funcția is_dir. Dosarul care trebuie scanat este specificat printr-o cale relativă sau completă.

if (fișier_există(„dosarul meu”))
ecou „Dosarul specificat există”;
altfel
ecou „Dosarul specificat nu există”;

if (is_dir("dosarul meu"))
ecou "Obiect specificat pliant";
altfel
ecou „Obiectul specificat nu este un folder”;

Există momente când trebuie să verificați dacă un fișier specificat există sau nu, de exemplu, pentru a efectua ulterior unele acțiuni asupra fișierului.

Am întâlnit și această problemă la dezvoltarea modulului. Și am găsit două opțiuni pentru a rezolva problema.

Verificarea existenței unui fișier folosind un link URL

În PHP există o funcție " fopen", care poate fi folosit pentru a deschide adresa URL specificată.

Ce facem? Încercăm să deschidem fișierul, iar dacă reușim, atunci fișierul există, în caz contrar, fișierul nu există.

Implementare:

Dar dacă nu avem un fișier, ci mai multe, ca să spunem așa, o serie de link-uri? Aceasta este exact sarcina care mi-a stat în fața de la bun început. Și soluția la această problemă este următoarea:

În acest caz, obținem o listă doar a acelor fișiere care există.

Verificarea existenței unui fișier local

Cuvântul „local” înseamnă că scriptul și fișierele pentru verificare se află pe același server. Dacă aveți o gamă destul de mare de legături, această opțiune este cea mai bună pentru a rezolva problema, deoarece nu facem o solicitare către un server terță parte, ci scanăm directoarele specificate.

Această metodă folosește funcția „file_exists” și, prin analogie cu opțiunea anterioară, înlocuiește pur și simplu o parte din script:

Și același lucru pentru matricea de legături:

Ce merită Notă? Faptul că această metodă este convenabilă pentru rularea fișierelor aflate în interiorul nostru Sistemul de fișiere. Prin urmare, este recomandabil să indicați toate legăturile ca fiind relative.

Apropo, la efectuarea uneia dintre comenzi, cu această metodă am reușit să scanez aproximativ 135.000 de fișiere în doar câteva secunde.

Utilizarea pe scară largă a bazelor de date nu a făcut ca sistemul de fișiere convențional să fie irelevant. Scrierea și citirea fișierelor încă ocupă un loc semnificativ în programare.

Algoritmii de verificare a prezenței unui fișier vă permit să evitați erorile la executarea codului. Funcția PHP file_exists oferă o soluție simplă pentru verificarea existenței unui fișier sau director.

Sintaxa și utilizarea funcției file_exists

Rezultatul funcției este adevărat sau fals. Singurul parametru este numele fișierului și calea către acesta. Rezultatul funcției este stocat în cache deoarece dacă PHP file_exists nu funcționează, dar fișierul există de fapt, atunci aceasta este o eroare de algoritm.

Folosind funcția clearstatcache(), puteți evita multe capcane în examinarea stării unui sistem de fișiere accesibil. Dar rețineți că într-un fișier inexistent, PHP file_exists va returna false până când fișierul pe care îl căutați este creat și apoi va returna true chiar și atunci când a fost deja șters.

Combinația corectă a funcției clearstatcache() și a funcțiilor legate de sistemul de fișiere (de exemplu, is_writable(), is_readable(), is_executable(), is_file(), is_dir() și altele) vă permite să evitați executarea scriptului „ascuns” erori.

Memorarea în cache îmbunătățește semnificativ performanța sistemului, dar în unele cazuri fișiere importante poate crea un rezultat cu adevărat nesigur și poate provoca o eroare de rulare gravă, greu de detectat.

Parametrul funcției PHP file_exists

PHP poate fi instalat pe diferite platforme de calcul și, prin urmare, calea și denumirea fișierelor pot fi diferite.

Documentația afirmă că PHP verifică pe baza UID/GID mai degrabă decât pe identificatori efectivi. Dezvoltarea unui algoritm folosind PHP file_exists, ar trebui să acordați atenție nu numai la barele oblice corecte (înainte sau înapoi), la codificarea căii către fișier și la numele fișierului în sine, ci și să verificați prezența registrului necesar, caracterele corecte, drepturile de acces și alte împrejurări.

Un rezultat negativ poate fi afectat de codificarea fișierului script și poate necesita conversia șirului de caractere preluat din baza de date.

Folosind funcția în practică

Domenii de utilizare Scripturi PHP diferă semnificativ. Acest lucru nu înseamnă că PHP file_exists este folosit numai pentru stocare informatii despre sistem, fișiere de date, obiecte sau imagini generate dinamic.

Există cazuri frecvente de utilizare a generării în flux a unor volume mari de informații temporare care nu sunt plasate eficient într-o bază de date imediat. Informațiile de la diferiți vizitatori pot circula pe site și numai după o prelucrare preliminară pentru o anumită perioadă de timp informatie necesara trebuie plasate în tabelele bazei de date.

Citind fișiere de sistem poate cauza stocarea în cache din cauza reîmprospătărilor multiple ale paginilor sau acțiunilor incorecte ale vizitatorilor. Există destul de multe situații în realitate, dar utilizarea corectă funcții vă permite să scrieți cod sigur și de încredere.

Există momente când trebuie să verificați dacă un fișier specificat există sau nu, de exemplu, pentru a efectua ulterior unele acțiuni asupra fișierului.

Am întâlnit și această problemă la dezvoltarea modulului. Și am găsit două opțiuni pentru a rezolva problema.

Verificarea existenței unui fișier folosind un link URL

În PHP există o funcție " fopen", care poate fi folosit pentru a deschide adresa URL specificată.

Ce facem? Încercăm să deschidem fișierul, iar dacă reușim, atunci fișierul există, în caz contrar, fișierul nu există.

Implementare:

Dar dacă nu avem un fișier, ci mai multe, ca să spunem așa, o serie de link-uri? Aceasta este exact sarcina care mi-a stat în fața de la bun început. Și soluția la această problemă este următoarea:

În acest caz, obținem o listă doar a acelor fișiere care există.

Verificarea existenței unui fișier local

Cuvântul „local” înseamnă că scriptul și fișierele pentru verificare se află pe același server. Dacă aveți o gamă destul de mare de legături, această opțiune este cea mai bună pentru a rezolva problema, deoarece nu facem o solicitare către un server terță parte, ci scanăm directoarele specificate.

Această metodă folosește funcția „file_exists” și, prin analogie cu opțiunea anterioară, înlocuiește pur și simplu o parte din script:

Și același lucru pentru matricea de legături:

Ce merită Notă? Faptul că această metodă este convenabilă pentru rularea fișierelor aflate în sistemul nostru de fișiere. Prin urmare, este recomandabil să indicați toate legăturile ca fiind relative.

Apropo, la efectuarea uneia dintre comenzi, cu această metodă am reușit să scanez aproximativ 135.000 de fișiere în doar câteva secunde.