Tarkista tiedoston olemassaolo. Kuinka tarkistaa, onko tiedosto PHP:ssä

Joskus sinun on tarkistettava, onko olemassa määritetty tiedosto tai ei esimerkiksi suorittaaksesi myöhemmin joitain toimintoja tiedostolla.

Törmäsin tähän ongelmaan myös moduulia kehitettäessä. Ja löysin kaksi ratkaisua ongelmaan.

Tiedoston olemassaolon tarkistaminen URL-osoitteen perusteella

PHP:ssä on funktio " fopen”, joka voi avata määritetyn URL-osoitteen.

Mitä olemme tekemässä? Yritämme avata tiedostoa, ja jos onnistumme, tiedosto on olemassa, muuten tiedostoa ei ole olemassa.

Toteutus:

Mutta entä jos meillä ei ole yhtä tiedostoa, vaan useita niin sanotusti joukko linkkejä? Tämä on juuri se tehtävä, joka oli alun perin edessäni. Ja ratkaisu tähän ongelmaan on seuraava:

Tässä tapauksessa saamme luettelon vain olemassa olevista tiedostoista.

Paikallisen tiedoston olemassaolon tarkistaminen

Sana "paikallinen" tarkoittaa, että komentosarja ja tarkistettavat tiedostot sijaitsevat samalla palvelimella. Jos sinulla on tarpeeksi iso joukko linkit - tämä vaihtoehto on paras ongelman ratkaisemiseen, koska emme tee pyyntöä kolmannen osapuolen palvelin, ja tarkistaa määritetyt hakemistot.

Tämä menetelmä käyttää "file_exists"-funktiota ja analogisesti aiempi versio vaihda vain osa skriptistä:

Ja sama linkkijoukolle:

Mitä se kannattaa Huomautus? Se, että tämä menetelmä on kätevä meidän sisällä olevien tiedostojen suorittamiseen tiedostojärjestelmä. Siksi on toivottavaa ilmoittaa kaikki linkit suhteellisesti.

Muuten, yhtä tilausta tehdessäni onnistuin tällä tavalla skannata noin 135 000 tiedostoa muutamassa sekunnissa.

Tämän toiminnon pakollinen parametri on polkunimi, joka määrittää polun luotavaan hakemistoon.

mkdir( "uusi kansio" );

Jos määrität kansion tällä tavalla, se luodaan samaan hakemistoon, josta php-skripti käynnistettiin. Jos haluat luoda hakemiston toiseen paikkaan, voit määrittää suhteellinen polku luotuun kansioon tai määritä täysi polku sivuston juurihakemistosta.

mkdir( "../uusi kansio" ); // yksi taso alaspäin

mkdir("/kansio1/kansio2/uusikansio"); // koko polku

Viimeisessä esimerkissä edellytys tulee olemaan alihakemistot "kansio1" ja "kansio2". Jos niitä ei ole, toiminto ei voi luoda kansiota tässä muodossa ja palauttaa virheilmoituksen:

Varoitus: mkdir() : Ei tällaista tiedostoa tai hakemistoa…

Onnistuessaan funktio palaa todellinen arvo. Jos pakettia ei ole luotu, palautetaan False.

if (mkdir("uusi kansio"))
kaiku "Kansio luotu onnistuneesti";
muu
kaiku "Kansiota ei luotu";

Älä kuitenkaan käytä tätä toimintoa tarkistamatta kansion olemassaoloa, koska palvelin näyttää silti virheilmoituksen, että kansiota ei voitu luoda.

Oikeuksien antaminen kansiota luotaessa

Toinen valinnainen mkdir-funktion parametri vastaa oikeuksien määrittämisestä luodulle kansioon. Oletuksena suurin sallittu käyttöoikeus on 0777.

Käyttöoikeudet määritetään oktaaliarvona, jossa on ensin pakollinen nolla. Ensimmäistä nollaa lukuun ottamatta luvut osoittavat käyttöoikeustasot omistajalle, omistajaryhmälle ja kaikille muille.

0 – pääsy kielletty;

1 – lukuoikeus;

2 – kirjoitusoikeus;

4 – toteutusoikeus.

Useimmiten oikeudet määritellään yhdistelmämääränä, esimerkiksi:

7 – täysi pääsy (1+2+4);

5 - lukeminen ja suoritus (1 + 4).

mkdir( "uusi kansio", 0777); // täysi pääsy kaikille

Useiden sisäkkäisten alihakemistojen luominen

Voit luoda useita alikansioita kerralla asettamalla vielä yhden valinnaisen loogisen parametrin - rekursiivisen.

mkdir("kansio1/kansio2/uusikansio" , 0777, tosi ); // täysi pääsy kaikille

Tässä tapauksessa, jos kansioita "kansio1" ja "kansio2" ei ole olemassa, toiminto luo ne ja kansion "newfolder". Virheilmoituksia, jos muita ongelmia ei ole, ei näytetä ja funktio palauttaa True.

Kansion poistaminen

PHP:n tyhjä kansio voidaan poistaa rmdir-toiminnolla. Dirrname-parametri määrittää myös täydellisen tai suhteellisen polun poistettavaan hakemistoon:

rmdir( "omakansioni");

rmdir("kansio1/kansio2/omakansio");

Kaikissa näissä tapauksissa vain "myfolder"-kansio poistetaan. Jos kansiota ei ole tai polku on asetettu väärin, näyttöön tulee virheilmoitus:

Varoitus: rmdir(omakansio) : Ei tällaista tiedostoa tai hakemistoa...

Ei-tyhjän kansion poistaminen

Ei-tyhjän hakemiston poistaminen tapahtuu poistamalla kansion sisäkkäiset tiedostot peräkkäin linkityksen poistotoiminnolla ja poistamalla sitten tyhjä kansio rmdir-toiminto. Voit tehdä tämän käyttämällä seuraavanlaista toimintoa:

funktio my_delete_dir($omapolku)(
$dir = opendir($omapolku);
while (($tiedosto = readdir($dir)))(
if (on_tiedosto($omapolku."/" .$tiedosto))
unlink($mypath. "/" .$tiedosto);
elseif (is_dir($omapolku."/" .$tiedosto) && ($tiedosto != "." ) && ($tiedosto != ".." ))
my_delete_dir ($omapolku."/" .$tiedosto);
}
suljettu($dir);
rmdir($omapolku);
}

my_delete_dir("omakansio"); // funktiokutsu

Tarkistaa, onko hakemistoa olemassa

Ennen useimpia hakemistotoimintoja kannattaa tarkistaa, onko niitä olemassa. Tähän käytetään file_exists-funktiota.

Lisäksi sinun on varmistettava, että määritetty objekti on kansio, ei tiedosto - is_dir-funktio. Tarkistettu kansio on määritetty suhteellisella tai täydellä polulla.

if (file_exists("omakansio"))
kaiku "Määritetty kansio on olemassa";
muu
kaiku "Määritettyä kansiota ei ole olemassa";

if (is_dir("omakansio"))
kaiku "Määritetty kansioobjekti";
muu
kaiku "Määritetty objekti ei ole kansio";

Tietokantojen laaja käyttö ei ole tehnyt tavanomaisesta tiedostojärjestelmästä merkityksetöntä. Tiedostojen kirjoittaminen ja lukeminen kestää edelleen merkittävä paikka ohjelmoinnissa.

Tiedoston olemassaolon tarkistamisen algoritmien avulla voit välttää virheet koodia suoritettaessa. PHP file_exists -toiminto tarjoaa yksinkertaisen ratkaisun tiedoston tai hakemiston olemassaolon tarkistamiseen.

File_exists-funktion syntaksi ja käyttö

Funktion tulos on tosi tai epätosi. Ainoa parametri on tiedoston nimi ja polku siihen. Toiminnon tulos tallennetaan välimuistiin, koska jos PHP:n file_exists ei toimi, mutta tiedosto on todella olemassa, kyseessä on algoritmivirhe.

Clearstatcache()-funktion avulla voidaan välttää monia virheitä tutkittaessa käytettävissä olevan tiedostojärjestelmän tilaa. Mutta on pidettävä mielessä, että olemattomalla PHP-tiedosto file_exists palauttaa false, kunnes kyseinen tiedosto on luotu, ja palauttaa sitten true, vaikka se olisi jo poistettu.

Clearstatcache()-funktion ja tiedostojärjestelmään liittyvien toimintojen (esimerkiksi is_writable(), is_readable(), is_executable(), is_file(), is_dir() ja muut) oikea yhdistelmä mahdollistaa "piilotetun" komentosarjan suorittamisen välttämisen. virheitä.

Välimuisti parantaa huomattavasti järjestelmän suorituskykyä, mutta joissain tapauksissa tärkeitä tiedostoja voi luoda todella epäluotettavan tuloksen ja aiheuttaa vakavan, vaikeasti löydettävän suoritusvirheen.

PHP file_exists -funktioparametri

PHP voidaan asentaa eri laskenta-alustoille, joten polku ja tiedostojen nimeäminen voivat olla erilaisia.

Asiakirja ilmoittaa sen PHP validointi keskittyy UID/GID:hen, ei tehokkaisiin tunnisteisiin. Algoritmin kehittäminen PHP:n käyttö file_exists, sinun tulee kiinnittää huomiota oikeisiin vinoviivojen (eteen- tai taaksepäin), tiedostopolun koodaukseen ja itse tiedoston nimeen, vaan myös tarkistaa oikea kirjainkoko, oikeat merkit, käyttöoikeudet ja muut olosuhteet. .

Päällä negatiivinen tulos skriptitiedoston koodaukseen saattaa vaikuttaa, tietokannasta saatu merkkijono voi olla tarpeen muuntaa.

Toiminnon soveltaminen käytännössä

Käyttöalueet PHP-skriptit eroavat merkittävästi. Tämä ei tarkoita, että PHP file_exists käytettäisiin vain tallennusta varten järjestelmätiedot, datatiedostoja, objekteja tai dynaamisia kuvia.

Toistuvat tapaukset, joissa käytetään suoratoistomuodostusta suuria määriä tilapäisiä tietoja, joita ei ole tehokasta heti lisätä tietokantaan. Tietoa eri vierailijoilta voi kerääntyä sivustolle, ja vain tietyn ajanjakson alustavan käsittelyn jälkeen tarvittavat tiedot on sijoitettava tietokantataulukoihin.

Lukeminen järjestelmätiedostot voi aiheuttaa välimuistin useiden sivujen päivitykset, tai vääriä tekoja vierailija. Todellisuudessa on monia tilanteita, mutta kanssa oikea käyttö toimintoja, sen avulla voit kirjoittaa turvallista ja luotettavaa koodia.

Joissakin tapauksissa sinun on tarkistettava, onko määritetty tiedosto olemassa vai ei, esimerkiksi suorittaaksesi myöhemmin joitain toimintoja tiedostolla.

Törmäsin tähän ongelmaan myös moduulia kehitettäessä. Ja löysin kaksi ratkaisua ongelmaan.

Tiedoston olemassaolon tarkistaminen URL-osoitteen perusteella

PHP:ssä on funktio " fopen”, joka voi avata määritetyn URL-osoitteen.

Mitä olemme tekemässä? Yritämme avata tiedostoa, ja jos onnistumme, tiedosto on olemassa, muuten tiedostoa ei ole olemassa.

Toteutus:

Mutta entä jos meillä ei ole yhtä tiedostoa, vaan useita niin sanotusti joukko linkkejä? Tämä on juuri se tehtävä, joka oli alun perin edessäni. Ja ratkaisu tähän ongelmaan on seuraava:

Tässä tapauksessa saamme luettelon vain olemassa olevista tiedostoista.

Paikallisen tiedoston olemassaolon tarkistaminen

Sana "paikallinen" tarkoittaa, että komentosarja ja tarkistettavat tiedostot sijaitsevat samalla palvelimella. Jos sinulla on melko suuri joukko linkkejä, tämä vaihtoehto on paras ongelman ratkaisemiseen, koska emme tee pyyntöä kolmannen osapuolen palvelimelle, vaan tarkistamme määritetyt hakemistot.

Tämä menetelmä käyttää "file_exists"-funktiota, ja analogisesti edellisen version kanssa se yksinkertaisesti korvaa osan komentosarjasta:

Ja sama linkkijoukolle:

Mitä se kannattaa Huomautus? Tämä menetelmä on kätevä tiedostojärjestelmässämme olevien tiedostojen suorittamiseen. Siksi on toivottavaa ilmoittaa kaikki linkit suhteellisesti.

Muuten, yhtä tilausta tehdessäni onnistuin tällä tavalla skannata noin 135 000 tiedostoa muutamassa sekunnissa.