Php hogyan kell kiejteni. Fájlokkal való munkavégzés php-ben: megnyitás, írás, olvasás. Hagyományos fopen módszerek

Utolsó frissítés: 1.11.2015

A legtöbb programozási nyelvhez hasonlóan a PHP is támogatja a fájlokkal való munkát, amelyek az információk tárolásának egyik módja.

Fájlok olvasása és írása

Fájlok megnyitása és bezárása

A fájlok PHP-ben való megnyitásához az fopen() függvény definiálva van. Ennek a következő meghatározása van: erőforrás fopen(string $fájlnév, string $mode) . Az első $filename paraméter a fájl elérési útját jelöli, a második pedig a megnyitási módot. A megnyitás céljától és a fájl típusától függően ez a paraméter a következő értékeket veheti fel:

    "r" : A fájl csak olvasható módon nyílik meg. Ha a fájl nem létezik, false értéket ad vissza

    "r+" : A fájl csak olvasható és írható. Ha a fájl nem létezik, false értéket ad vissza

    "w" : A fájl írásra megnyílik. Ha már létezik ilyen fájl, akkor felülírja, ha nem, akkor létrejön.

    "w+" : A fájl írásra megnyílik és olvasható. Ha már létezik ilyen fájl, akkor felülírja, ha nem, akkor létrejön.

    "a" : A fájl írásra megnyílik. Ha már létezik ilyen fájl, akkor az adatok a fájl végére íródnak, és a régi adatok megmaradnak. Ha a fájl nem létezik, akkor létrejön

    "a+" : A fájl megnyílik olvasásra és írásra. Ha a fájl már létezik, akkor az adatok a fájl végéhez fűződnek. Ha a fájl nem létezik, akkor létrejön

Az fopen függvény kimenete egy fájlleíró lesz. Ez a fogantyú a fájlműveletekhez és a fájl bezárásához használható.

A munka befejezése után a fájlt be kell zárni az fclose() függvénnyel, amely egy fájlleírót vesz paraméterként. Például nyissunk meg és zárjunk be egy fájlt:

$fd = fopen("form.php", "r") or die("nem sikerült megnyitni a fájlt"); fclose($fd);

Az or die ("hibaszöveg") konstrukció lehetővé teszi, hogy a szkript leálljon és hibaüzenetet jelenítsen meg, ha az fopen függvény nem tudta megnyitni a fájlt.

Fájl olvasása

Egy fájl olvasásához több funkciót is használhat. A soronkénti olvasáshoz az fgets() függvényt használjuk, amely egy fájlleírót kap, és egy sor beolvasást ad vissza. Nézzük soronként végig a teljes fájlt:

Minden alkalommal, amikor az fgets() meghívásra kerül, a PHP a mutatót az olvasott sor végére helyezi. A fájl végének követéséhez a feof() függvényt használjuk, amely igazat ad vissza, amikor a fájl elkészül. És amíg el nem érjük a fájl végét, használhatjuk az fgets() függvényt.

A teljes fájl olvasása

Ebben az esetben nem kell kifejezetten megnyitnunk a fájlt, beszereznünk egy kezelőt, majd bezárnunk a fájlt.

Olvasás blokkolása

A fread() függvény segítségével blokkonkénti olvasást is végezhet, azaz bizonyos számú bájtot kiolvashat egy fájlból:

A fread() függvény két paramétert igényel: az olvasandó fájlkezelőt és az olvasandó bájtok számát. Egy blokk beolvasásakor a mutató a fájlban a blokk végére mozog. A feof() függvény segítségével nyomon követheti a fájl elkészültét.

Írj egy fájlt

Fájl írásához használja az fwrite() függvényt, amely a következő sort írja a fájlba:

Egy másik fputs() függvény hasonlóan működik:

Munka a fájlmutatóval

Amikor "w" módban nyit meg egy fájlt olvasásra vagy írásra, a fájlban lévő mutató a fájl elejére kerül. Olvasáskor PHP adatok a mutatót a fájlban az olvasott adatblokk végére mozgatja. Azonban manuálisan is módosíthatjuk a mutatót a fájlban, és tetszőleges helyre állíthatjuk. Ehhez a funkciót kell használni fseek, amelynek formális meghatározása a következő:

Int fseek (forrás $handle , int $offset [, int $whence = SEEK_SET ])

A $handle paraméter egy fájlleírót jelöl. Az $offset paraméter az eltolás bájtokban a fájl elejéhez képest, amelytől az olvasás/írás kezdődik. A harmadik opcionális paraméter határozza meg az eltolás beállítását. Három értéket vehet fel:

    SEEK_SET : alapértelmezett érték, az eltolást állítja be eltolási bájtokban a fájl elejéhez képest

    SEEK_CUR: beállítja az eltolást bájtokban a fájl aktuális pozíciójának elejéhez képest

    SEEK_END : az eltolást úgy állítja be, hogy a fájl végétől eltolja a bájtokat

Ha a mutatót sikeresen telepítette, az fseek() függvény 0-t, ha pedig a mutató sikertelen, -1-et ad vissza.

Példa a függvény használatára:

$fd = fopen("hello.txt", "w+") or die("nem sikerült megnyitni a fájlt"); $str = "Szia világ!"; // sor az íráshoz fwrite($fd, $str); // a sort az elejére írjuk fseek($fd, 0); // helyezzük a fájlmutatót az elejére fwrite($fd, "Oink"); // a sort az elejére írjuk fseek($fd, 0, SEEK_END); // helyezzük a mutatót a végére fwrite($fd, $str); // írunk még egy sort a végére fclose($fd);

Az fopen, fclose, feof, fgets, fgetss és fscanf függvények használatáról

Soroljunk fel minden lehetőséget

A modern programozási nyelvekkel, például a PHP-vel való munka egyik előnye a rendelkezésre álló funkciók száma. A PHP könnyen átveheti a Perl nyelvi mottóját: "Valamit többféleképpen lehet csinálni", különösen akkor, ha arról beszélünk a fájlfeldolgozásról. De a rendelkezésre álló eszközök sokasága miatt felmerül a kérdés, hogy melyik a legjobb a munka elvégzéséhez. Természetesen a kérdésre adott válasz attól függ, hogy milyen célokat tűzött ki maga elé a fájl feldolgozásakor, így a nyelv összes képességének elsajátítása megéri az időt.

Hagyományos fopen módszerek

Az fopen metódusok talán a legismertebbek a régebbi C és C++ programozók számára, mivel többé-kevésbé ezek azok az eszközök, amelyek évek óta a keze ügyében vannak, ha már dolgozott ezekkel a programozási nyelvekkel. Bármelyik ilyen módszernél ezt csinálja szokásos eljárás, az fopen segítségével megnyitja a fájlt, egy függvényt az adatok beolvasásához, majd az fclose funkciót a fájl bezárásához, ahogy az 1. listában látható.

Felsorolás 1. Fájl megnyitása és olvasása fgets segítségével
$file_handle = fopen("saját fájl", "r"); while (!feof($file_handle)) ( $sor = fgets($file_handle); echo $line; ) fclose($file_handle);

Bár ezeket a funkciókat a legtöbb tapasztalt programozó ismeri, hadd elemzem, hogyan működnek. Valójában az alábbi lépéseket követi:

  1. Nyissa meg a fájlt. A $file_handle magára a fájlra mutató hivatkozást tárol.
  2. Ellenőrizze, hogy elérte-e a fájl végét.
  3. Folytassa a fájl olvasását, amíg el nem éri a végét, nyomtasson ki minden olvasott sort.
  4. Zárja be a fájlt.

Ezt szem előtt tartva, megvizsgálok minden itt használt fájlfunkciót.

fopen függvény

Az fopen függvény kapcsolatot létesít egy fájlhoz. Azért mondom, hogy "kapcsolatot létesít", mert a fájl megnyitása mellett az fopen egy URL-t is meg tud nyitni:

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

Ez a programsor hivatkozást hoz létre a fenti oldalra, és lehetővé teszi, hogy elkezdje olvasni helyi fájlként.

Jegyzet: Az fopenben használt "r" opció azt jelzi, hogy a fájl csak olvasható. Mivel a fájlba írás nem tartozik a cikkben tárgyalt kérdések körébe, nem sorolom fel a paraméter összes lehetséges értékét. Ha azonban binárisokból olvasol a platformok közötti kompatibilitás érdekében, módosítania kell az „r”-t „rb”-re. Az alábbiakban egy példa erre a típusra.

feof funkció

A feof parancs meghatározza, hogy az olvasás elérte-e a fájl végét, és igaz vagy hamis értéket ad vissza. Az itt látható ciklus a "myfile" fájl végéig folytatódik. Vegye figyelembe, hogy a feof akkor is False értéket ad vissza, ha egy URL-t olvas, és a kapcsolat időtúllépése miatt nincs több olvasandó adat.

Függvény fclose

Hagyjuk ki az 1. lista közepét, és menjünk a végére; Az fclose az fopen ellenkezőjét teszi: bezárja a kapcsolatot a fájllal vagy URL-lel. A funkció végrehajtása után többé nem fog tudni olvasni a fájlból vagy a socketből.

fgets függvény

Az 1. listában néhány sort visszamegyünk a fájlfeldolgozási folyamat lényegéhez: a fájl tényleges olvasásához. Az fgets függvény a választott fegyver az első példában. Megragad egy adatsort egy fájlból, és karakterláncként adja vissza. Innen megjelenítheti az adatokat, vagy más módon feldolgozhatja azokat. Az 1. lista példája a teljes fájlt kinyomtatja.

Ha úgy dönt, hogy korlátozza annak az adattömbnek a méretét, amellyel dolgozik, hozzáadhat egy argumentumot az fgets-hez a korlátozás érdekében maximális hossza rögzített adatok sorai. Például a következő kóddal korlátozhatja a sor hosszát 80 karakterre:

$karakterlánc = fgets($file_handle, 81);

Gondoljon a "\0"-ra, a C sorvégi jelzőre, és állítsa be a hosszt a ténylegesen szükségesnél egy karakterrel hosszabbra. Amint látja, a fenti példa 81 karaktert használ, míg ehhez 80 karakterre van szüksége. Legyen szokása egy további karakter hozzáadása, amikor egy adott függvényhez sorhossz-korlátot kell beállítani.

fread funkció

Az fgets függvény csak egy a fájl olvasásához elérhető számos funkció közül. Ez az egyik leggyakrabban használt funkció, mivel a legtöbb esetben a fájl soronkénti feldolgozása a legértelmesebb. Valójában számos más funkció is kínál hasonló képességeket. Bárhogy is legyen, a soronkénti elemzés nem mindig az, amire szüksége van.

És itt elérjük Fread . A fread funkciónak némileg más a célja, mint az fgets-nek: bináris fájlok (vagyis olyan fájlok, amelyek kezdetben nem állnak ember által olvasható szövegből) olvasására szolgál. Mivel a "sorok" fogalma nem releváns a bináris fájlok esetében (a logikai adatstruktúrák jellemzően nincsenek sorokra bontva), meg kell adni az olvasandó bájtok számát.

$fh = fopen("saját fájl", "rb"); $adat = fread($file_handle, 4096);

A fenti példa 4096 bájt (4 KB) adatot olvas be. Ne feledje, hogy a megadott értéktől függetlenül a fread maximum 8192 bájtot (8 KB) fog olvasni.

Feltételezve, hogy a fájl nem nagyobb 8 KB-nál, az alábbi programrészletnek a teljes fájlt egy sorban kell olvasnia.

$fh = fopen("saját fájl", "rb"); $adat = fread($fh, fájlméret("saját fájl")); fclose($fh);

Ha a fájl mérete nagyobb, akkor egy hurkot kell használnia a többi részének beolvasásához.

fscanf függvény

Visszatérve a karakterlánc-feldolgozáshoz, az fscanf a hagyományos C fájlkönyvtár funkció utódja is. Ha nem ismerné, az fscanf az adatmezőket változókká olvassa be egy fájlból.

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

Az ebben a függvényben használt formátumkarakterláncokat számos forrás leírja, például a PHP.net, ezért itt nem ismétlem meg ezeket az információkat. Elég azt mondani, hogy a karakterlánc formázása nagyon rugalmas. Azt is meg kell említeni, hogy minden mező a függvény által visszaadott változóba kerül. (C-ben ezeket argumentumként adjuk át.)

fgetss függvény

Az fgetss függvény eltér a hagyományos fájlkezelési funkcióktól, és jobban megértheti a PHP képességeit. Úgy működik, mint az fgets, de eldobja a találtakat. HTML címkék vagy PHP, csak a csupasz szöveget hagyva. Vegyük az alábbi HTML-fájlt.

Lista 2. Példa HTML fájlra
A címem

Ha megérted, hogy mit jelent a "Cause there ain"nobody for to nem adna fájdalmat" akkor túl sokat hallgatsz az America zenekarból



Adjuk át az fgetss függvényen.

Lista 3. Az fgetss használata
$file_handle = fopen("saját fájl", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Ezt kapod kimenetként:

A címem Ha érted, hogy mit jelent a "Cause there ain"nobody for to give you no pain", akkor túl sokat hallgatsz az America zenekarból

fpassthru funkció

Függetlenül attól, hogy hogyan olvassa be az adatokat egy fájlból, a fennmaradó adatokat kinyomtathatja a szabványos kimeneti csatornán az fpassthru funkció használatával.

fpassthru($fh);

Ez a függvény kinyomtatja az adatokat, így nem kell változóba tenni.

Nemlineáris fájlfeldolgozás: mozgás egy fájlon keresztül

Természetesen a fent leírt funkciókkal csak szekvenciálisan lehet olvasni egy fájlból. Az összetettebb fájlokat a fájl elején vagy végén a fájl különböző részeire kell mozgatni. Ehhez az fseek függvényre van szükség.

fseek($fh, 0);

A fenti példa a fájl elejére tér vissza. Ha nem akar a fájl legelejére lépni - mondjuk elég egy kilobájt -, akkor egyszerűen írja be:

fseek($fh, 1024);

A PHP 4.0 verziójától kezdve számos más lehetőség is elérhető. Például, ha 100 bájtot kell előrelépnie jelenlegi pozíciójából, akkor a következő kódot használhatja:

fseek($fh, 100, SEEK_CUR);

Hasonlóképpen a 100 bájttal való visszalépést a következőképpen hajtja végre:

fseek($fh, -100, SEEK_CUR);

Ha vissza szeretne térni a 100 bájtos pozícióba a fájl vége előtt, használja helyette a SEEK_END parancsot.

fseek($fh, -100, SEEK_END);

Az új pozíció elérése után az fgets, az fscanf vagy más függvény segítségével kiolvashatja az adatokat.

Jegyzet: az fseek nem használható URL-re hivatkozó fájlleíróknál.

Rögzítsen egy teljes fájlt

Most nézzük meg a PHP néhány egyedi fájlfeldolgozási képességét: nagy adatblokkok feldolgozását egy vagy két sorban. Például hogyan ragadhat meg egy fájlt és jelenítheti meg annak teljes tartalmát a weboldalán? Nos, láttál már példát az fgets ciklus használatára. De hogyan könnyítheted meg? A folyamat szinte nevetségesen egyszerű az fgetcontents használatával, amely a teljes fájlt egy sorba helyezi.

$saját_fájl = file_get_contents("saját fájlnév"); echo $saját_fájl;

Bár ez nem a legjobb megoldás, ezt a parancsot még rövidebben is megírhatja:

echo file_get_contents("saját fájlnév");

Ez a cikk elsősorban a helyi fájlok feldolgozásával foglalkozik, azonban érdemes megjegyezni, hogy a leírt funkciók segítségével más weboldalakat is rögzíthet, megjeleníthet és értelmezhet.

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

Ez a parancs valójában ugyanaz, mint:

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

Lehet, hogy ezeket a példákat nézi, és azt gondolja: "Ez nagyon sok munka." A PHP fejlesztői egyetértenek Önnel. Tehát lerövidítheti a fenti parancsot a következőre:

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

A readfile funkció egy fájl vagy weboldal teljes tartalmát az alapértelmezett kimeneti pufferbe írja ki. Alapértelmezés szerint ez a parancs hibaüzenetet jelenít meg, ha sikertelen. Ennek elkerülése érdekében (ha akarja), próbálja ki a következő parancsot:

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

Természetesen, ha a fájlok tartalmát kell feldolgoznia, akkor a file_get_contents által visszaadott egyetlen sor valószínűleg túl sok. Érdemes először részekre bontani a split() függvény segítségével.

$tömb = split("\n", file_get_contents("saját fájl"));

De miért van szüksége erre a bonyolultságra, ha van egy tökéletesen megfelelő funkció, amely elvégzi a munkát Ön helyett? A PHP file() függvény ezt a feladatot egy lépésben hajtja végre: egy string tömböt ad vissza, amelynek elemei a fájl sorai.

$tömb = fájl("sajátfájl");

Meg kell jegyezni, hogy van egy kis különbség a fenti két példa között. A split parancs eltávolítja az újsorokat, míg a fájl parancs újsorokkal fejezi be a tömbsorokat (ahogyan az fgets is).

A PHP képességei azonban messze túlmutatnak a fent leírtakon. A teljes .ini fájlokat PHP stílusban elemezheti egyetlen parse_ini_file paranccsal. A parse_ini_file parancs a 4. listában láthatókhoz hasonló fájlokra vonatkozik.

Lista 4. Példa .ini fájlra
; Megjegyzés neve = "Artúr király" küldetés = A Szent Grál kedvenc színe = Kék Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

A következő parancsok egy fájlt tömbként jelenítenek meg, majd kinyomtatják a tömböt:

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

Az eredmény a következő kimenet lesz:

Lista 5. Kimenet
Array ( => Arthur király => A Szent Grált keresni => Kék => Mark Twain => Whoopi Goldberg)

Persze ezt észreveheti ezt a parancsot egyesített szakaszok. Ez az alapértelmezett művelet, de könnyen testreszabhatja a parse_ini_file második argumentumával: process_sections, amely egy logikai változó. Állítsa a process_sections értéket True értékre.

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

És a kimeneted így fog kinézni:

Felsorolás 6. Kimenet
Array ( => Array ( => Arthur király => Keresni a Szent Grált => Kék) => Array ( => Mark Twain => Whoopi Goldberg))

A PHP egy könnyen értelmezhető többdimenziós tömbbe helyezi az adatokat.

De ez csak a jéghegy csúcsa, ha PHP-ben történő fájlfeldolgozásról van szó. Az összetettebb funkciók, például a tidy_parse_file és az xml_parse segíthetnek a HTML- és XML-dokumentumok elemzésében. További információért olvassa el a részt részletes információk ezeknek a funkcióknak a működéséről. Mindkettőt érdemes megfontolni, ha ilyen típusú fájlokkal dolgozik, de ahelyett, hogy az összes lehetséges fájltípust megnézné, érdemes közelebbről megvizsgálnia ennek a cikknek a tartalmát, ahol számos jó Általános szabályok az eddig leírt funkciókkal való munkavégzéshez.

Jó programozási stílus

Soha ne feltételezze, hogy a programban minden a tervezett módon fog működni. Például: mi van, ha a keresett fájlt áthelyezték? Mi a teendő, ha az engedély módosítása miatt nem tudja elolvasni a fájl tartalmát? A file_exists és is_readable metódusokkal előzetesen ellenőrizheti a fájl létezését és az olvasási jogosultságokat.

Lista 7. A file_exists és is_readable használata
$fájlnév = "saját fájl"; if (fájl_létezik($fájlnév) && olvasható ($fájlnév)) ( $fh = fopen($fájlnév, "r"); # Fclose($fh); )

A gyakorlatban azonban ez a program valószínűleg túlzásba esik az Ön feladatához. Az fopen által visszaadott értékek kezelése egyszerűbb és pontosabb.

if ($fh = fopen($fájlnév, "r")) ( # Fclose($fh); )

Mivel az fopen hamis értéket ad vissza, ez biztosítja, hogy a fájl csak akkor kerüljön feldolgozásra, ha a fájl megnyitható. Természetesen, ha a fájl nem létezik, vagy olvashatatlan, akkor a visszatérési érték negatív lesz. Ezért egy ilyen ellenőrzés csapda, amelybe minden lehetséges probléma beleesik. Alternatív megoldásként kiléphet a programból, vagy hibaüzenetet jeleníthet meg, ha a fájl nem nyitható meg.

Az fopenhez hasonlóan a file_get_contents, file és readfile függvények False értéket adnak vissza, ha a fájlt nem lehet megnyitni vagy feldolgozni. Az fgets, fgetss, fread, fscanf és fclose függvények szintén False értéket adnak vissza, ha hiba történik. Természetesen az fclose kivételével valószínűleg már feldolgozta az általuk visszaadott eredményeket. Ami az fclose -t illeti, nem sokat tehetünk, ha a fájlkezelő nem zár be megfelelően, ezért az fclose visszatérési értékének ellenőrzése általában túlzás.

A választás a tiéd

A PHP-ben nincs hiány hatékony módszerek fájlok olvasása és elemzése. Az olyan klasszikus funkciók, mint a fread, legtöbbször megbízhatóan szolgálhatnak, vagy jobban vonz a readfile egyszerűsége, ha erre van szüksége a munka elvégzéséhez. A választás valóban attól függ, hogy mit akar elérni.

Ha nagy mennyiségű adatot dolgoz fel, valószínűleg hasznosabbnak és hatékonyabbnak fogja találni az fscanf-et, mint például a fájl és az azt követő split és sprintf parancsok együttes használata. Ha egyszerűen csak nagy mennyiségű szöveget jelenít meg kisebb változtatásokkal, a file , file_get_contents vagy readfile függvények használata értelmesebb lehet. Ez a megoldás valószínűleg helyes lesz, ha PHP használatával gyorsítótárazáshoz vagy akár ideiglenes proxyszerver létrehozásához.

A PHP számos eszközt biztosít a fájlokkal való munkavégzéshez. Ismerje meg mindegyiket jobban, és derítse ki, hogy mely eszközök a legjobbak az éppen futó projekthez. Széles választékot kínálnak Önnek szoftver, használja őket a leghatékonyabban, és élvezze a fájlok PHP-val való feldolgozását.

A PHP sokkal később jelent meg, mint ahogy a programozási nyelvek megerősítették pozícióikat, és általános elképzeléseket fogalmaztak meg a szintaxisról, logikáról, változókról és egyéb programobjektumokról. A fájlok és a velük való munkavégzés funkciói nem haladtak előre, és még a természetes okokból felmerült fájlkódolási probléma sem vezetett gyökeresen új megoldásokhoz.

Általános megjegyzések

A fájlokkal végzett fő munka, bármilyenek legyenek is, a megnyitásból, olvasásból/írásból és bezárásból áll. Használhatja a fájlhoz való hozzáférés blokkolásának/feloldásának funkcióit feldolgozás közben, beállíthatja az olvasási/írási pozíciót a fájlban - minden ugyanaz, mint korábban, a távoli múltban.

A PHP fontos pontja a fájlokkal való munkavégzéshez szükséges funkciók és a használatukra vonatkozó lehetőségek bősége. A gyakorlatban elég egyszerű, de működő lehetőségeket használni. A fájl mindenekelőtt programmemória. Információkat tárolhat benne. Bármely program, bármely weboldal célja az információk bemutatása, feldolgozása és biztonságának biztosítása.

Lényeges körülmény

Korábban a kompatibilitás követelménye, legalábbis alulról felfelé, megingathatatlan volt. Azaz egy programozási nyelv egyik verziójában egyszer megírt program ideális esetben a következő verzióban kerül lefordításra/értelmezésre. A modern programozásban ez nem így van. A nyelv szintaktikai struktúráinak kompatibilitásának követelménye a történelem része, a stílusok és a programozási eszközök, illetve bizonyos eszközök verziói közötti küzdelem pedig életük normájává vált.

A fájlokkal, valamint az adatbázisokkal végzett munka ugyanolyan fontos, mint a webhely felülete. Az elsőt úgy kell megépíteni, hogy a platform, a tárhely vagy a nyelvi verzió megváltoztatásakor ne kelljen módosítani az oldal kódját. A fájlokkal való munkavégzés felületének külön szkriptben kell szerepelnie, és biztosítania kell a teljes kompatibilitást, ahogy az oldal kialakításának is megfelelően alkalmazkodnia kell bármely eszközhöz, böngészőhöz, és az oldal többi funkcióját is ugyanazokkal a lehetőségekkel kell ellátnia.

Olvass és változtass magadon

Változhat-e egy program önmagán, vagyis javíthat-e egy script? Ez a kérdés a mai napig sokakat foglalkoztat. De a feladat sokkal praktikusabbnak hangzik: PHP PHP fájl olvasása. A fejlesztő nem mindig oldhat meg egy adott problémát meghatározott kód írásával. Néha meg kell változtatni, amikor egy látogató felkeresi az oldalt, és olyan kérdést fogalmaz meg, amely a fejlesztési szakaszban nem volt előre látható.

Mint minden más esetben, először is meg kell nyitnia a fájlt. Nem számít, hogy ez a fájl létezik-e vagy sem. Ha ismert, hogy a fájl létezik (a file_exists() függvény pozitív választ ad), akkor az fopen() függvény 'r', 'r+', 'a', 'a+' hozzáféréssel kerül felhasználásra. Ha a fájl még nem létezik, akkor „a”, „a+”, „w”, „w+” hozzáféréssel. A fájl megnyitásának eredménye lesz a leírója. A fájlt az fclose() függvény zárja be.

Kényelmes a PHP használatával egy fájl tömbbe olvasására, ha nincs szükség a feldolgozásra az olvasáskor.

if (file_exists($fName)) (

$aLines = fájl($fName)

Ebben az opcióban a fájl minden sora egymás után kerül a tömbelembe. Megjegyzendő, hogy a file() vagy file_get_contents() függvényeknek nem kell megnyitniuk és bezárniuk a fájlt.

Ha a bemeneti fájl túl nagy, és csak kevés információt kell találnia, vagy egyéb okok miatt, a PHP segítségével soronként olvashatja a fájlt. A PHP ezt az fgets() és fgetc() függvényekkel biztosítja.

$fvs = fopen($fName, "r")

while ((false !== ($cLine = fgets($fvs, 2000)))) (

$cLines .= "
" . $i . "). " . $cLine

Mindkét lehetőség hibátlanul működik. Ha azonban PHP-fájlt későbbi módosítás céljából beolvas a PHP-vel, óvintézkedéseket kell tenni. Nem mindig lehet előre látni, hogyan fogja használni a látogató a webhely fejlesztési szakaszában. Jobb, ha a szkriptek az oldal funkcióin belül módosulnak, és ezt a változtatást a látogató, így az erőforrás-adminisztrátor sem tudja ellenőrizni.

Eredmények mentése

A kapott és frissített információkat az fputs() függvény soronként vagy a file_put_contents() függvény egészében írja be a fájlba.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

nyáj ($fvs, LOCK_EX)

$cLine = "1 sor". chr(10)

fputs ($fvs, $cLine)

$cLine = "2 sor" . chr(10)

fputs ($fvs, $cLine)

nyáj ($fvs, LOCK_UN)

A soronkénti rögzítési lehetőségnél a rögzítési folyamat során manipulálhatunk az adatokkal, a második esetben az írott karakterlánc vagy tömb a teljes fájlba kerül.

$file = " scData.php "

$cContents = file_get_contents($file)

// bejegyzés hozzáadása

$cContents .= "új bejegyzés\n"

// írja vissza a fájlt

file_put_contents($file, $cContents)

A PHP-fájlok olvasása és írása egyszerű és természetes. Fontos azonban észben tartani: minden fájlnak van neve, kiterjesztése és elérési útja (mappa). Ahhoz, hogy egy PHP szkript képes legyen olvasni és írni fájlokat, ennek a szkriptnek rendelkeznie kell a megfelelő jogosultságokkal. Ezek automatikusan megjelennek a tárhelyen, de bizonyos esetekben ki kell bővíteni őket.

Egyes esetekben kívánatos lehet az eredmények ellenőrzése próbaleolvasással. A PHP fájlok írása ezt a fejlesztés során igényli, de bizonyos esetekben az oldal biztonsága vagy megbízhatósága érdekében elengedhetetlen az adatrögzítés ellenőrzése.

A PHP, a MySQL, a JavaScript és különösen a böngészők jellemző tulajdonsága: csendben enged bizonyos hibákat. „Nem ismerik fel, nem végezték el...” – nem túl jó frontvonali gyakorlat információs technológiák, de ez megtanítja a fejlesztőket arra, hogy ne hibázzanak, és tiszta, jó minőségű kódot írjanak, ami szintén nem rossz.

PHP és valós dokumentumokkal való munka

A PHP egy PHP-fájl olvasása minden bizonnyal gyakorlati jelentőséggel bír, de ez a programozás területe. A felhasználót és az oldal látogatóját az alkalmazott természetű információk érdeklik, amelyeket táblázatok és dokumentumok formájában szokott látni, különösen *.xlsx és *.docx fájlformátumban. Ezek MS Excel és MS Word formátumú fájlok.

Az áruk, árak, jellemzők listái általában táblázatok formájában alakulnak ki, ezért elengedhetetlen az Excel fájl olvasása a PHP-ben.

A PHPExcel és PHPWord könyvtárakat az ilyen fájlokkal való együttműködésre fejlesztették ki. A *.xlsx és *.docx fájlok tartalma azonban az OOXML szabványban, azaz a valódi, érthető dokumentum zip archívumban jelenik meg. A Zip archívum fájlok halmaza, beleértve a képeket, objektumokat, képleteket és más programok beszúrásait. A szöveges fájlokat itt címkék formájában megjelenő leírások képviselik. Egy ilyen fájl olvasása nem elég, elemezni kell, hogy megkapja a tartalmat és a szerkezetet a használatra és a módosításra.

Ez azt jelenti, hogy az olvasási művelet archívumnyitó eljárássá válik. Ezek a könyvtárak önállóan nyitják meg a dokumentumarchívumot, és széles körű funkciókat biztosítanak a fejlesztőnek az ilyen dokumentumok olvasásához, feldolgozásához és írásához.

Excel táblázatok

include_once 'PhpOffice/PhpExcel/IOFactory.php'

függvény scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFActory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//ez a tömb karakterláncok tömbjeit tartalmazza

$aSheet = $objPHPExcel->getActiveSheet()

$tömb = array()

//kezelés

foreach($aSheet->getRowIterator() mint $row)(

$cellIterator = $sor->getCellIterator()

foreach($cellIterator mint $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($tömb, $elem)

Az Excel fájlok olvasása és feldolgozása sokkal nehezebben feldolgozható Word dokumentumok. A legjobb megoldás, ha komoly projektet kell végrehajtania az alkalmazott információk olvasásához és feldolgozásához, először a PHPWord könyvtár elsajátítása. Ezzel jó tapasztalatokat szerezhet, és gyorsan megértheti a probléma sajátosságait.

Word dokumentumok

Csak két sor:

$oWord = új \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

A $cFileName dokumentum most már feldolgozható. Ezt követően megnyílik az archívum, kiválasztják és elemzik annak tartalmát, amely megjeleníthető a weboldalon, módosítható és visszaírható.

$zipClass = új ZipArchive()

$zipClass->open($this->tempFileName)

// olvassa el a dokumentum teljes tartalmát

for ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// Az ".xml" és ".xml.rels" kiterjesztésű fájlok a dokumentumtáblába kerülnek

// minden xml sor egyedi számmal van írva sorrendben

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// az összes többi fájl a dokumentummappába kerül

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // tartalom fájlként

A lehetőségek, amelyek akkor nyílnak meg PHP segítség Az Excel és a PHP Word lehetővé teszi, hogy valódi dokumentumokat kezeljen, és azok tartalmát bármikor relevánssá tegye. A mai dinamikus világban ez nagyon fontossá válik. A súlypont már régen elment a helyi használatból számítógép tartozék a virtuális internetes térbe. Ezért a helyi Microsoft-termékekben táblák és dokumentumok létrehozása kevésbé hatékony, mint az ilyen dokumentumokkal való automatikus és félautomata üzemmódban végzett munka egy webhelyen, amelyhez nemcsak a táblázat vagy dokumentum készítője, hanem a fogyasztói is hozzáférhetnek.

Szöveges fájlok, egy másik élet

Első megközelítésben a szöveges fájlok egyszerűbbek, mint a PHP-fájlok vagy az alkalmazásdokumentumok. Itt azonban van min elgondolkodni. Az ilyen fájlok olvasási/írási műveleteit már fentebb jeleztük, de az ilyen fájlok jelentése sokkal fontosabb.

Mivel létezik olyan adottság, mint a kliens és a szerver (az elsőt a JavaScript, a másodikat a PHP uralja), így még a cookie és a sessions mechanizmusok sem képesek megbirkózni a szkriptek, oldalak vagy bizonyos folyamatok közötti információátvitel szükségességével.

Lehetőség van a kívánt változtatások megjelenítésére az adatbázisban, de minden előnyük és gyorsaságuk ellenére a kis ideiglenes vagy állandó szöveges fájlok sokkal érdekesebb lehetőséget jelenthetnek az információ továbbítására. Ha nem hoz létre sok kis fájlt, és nem szabályozza a méretüket, akkor ezek az adatbázisok speciális és rugalmasabb változatai lehetnek.

A PHP egy szöveges fájl beolvasása gyors, azonnal struktúrává, tömbbé vagy objektummá elemezhető. Ez utóbbi nagyon fontos, mivel lehetővé teszi olyan objektumok létrehozását, amelyek a megadott időn kívül élnek PHP szkript, amely, mint tudod, csak a szerveren létezhet, és csak az oldal betöltésekor generálódik AJAX válasz, vagy más okból, ami miatt a PHP értelmező elindul.

Ha belegondolunk abba, hogy egy szöveges fájl a fejlesztőtől kapott tartalom és szerkezet, a PHP fájl az értelmező szintaxisa plusz a fejlesztő logikája, a „címkézett” leírások html, css, xml pedig inkább szemantikai elemek, de szabályozva. statikus szabványok szerint. Arra a következtetésre juthatunk, hogy valószínűleg itt az ideje, hogy a fájlok új tartalmat szerezzenek, és ez már önmagában határozza meg minőségüket és használati logikájukat. Pontosan azért, mert a programozás még nem áll készen a fejlesztés következő szakaszára, a fájlok ma egyszerűen fájlok maradnak, amelyeket a fejlesztő hoz létre és határozza meg a felhasználásukat.

A legérdekesebb és legígéretesebb az, amikor a PHP önállóan olvas egy PHP fájlt, amikor arra szükség van. Egy egyszerű PHP pedig egy sort kiolvas egy fájlból egy objektum létrehozását eredményezi, legalábbis abban az állapotban, amelyben el lett mentve. Ezek nem teljesen ismert ötletek, de a modern világban minden olyan gyorsan változik.

16,5K

Valójában a php fájl megnyitása nem nagy probléma. Az erdő közepén nehezebb lehet kinyitni egy üveg sört. De csak a lelkes programozók gondolják így. Kezdőknek pedig elmondjuk a PHP összes képességét a fájlokkal való munkavégzéshez:

php fájlok

A php kiterjesztésű fájlok az azonos nevű programozási nyelven írt kódot tartalmaznak. Más nyelvekkel ellentétben a php szerveroldali programozási nyelv. Vagyis a szerver oldalon fut. Ezért a kódjának hibakereséséhez helyi szervert kell telepíteni az ügyfélgépre.

A php fájlokkal való munkához speciális alkalmazásokat használnak - szoftverszerkesztőket. A leggyakoribbak a következők:

  • Dreamweaver.
  • PHPEdit.
  • Eclipse PHP fejlesztés.
PHP alapú webhelyek létrehozásakor előfordulhat, hogy újra fel kell használnia a programkódot. Ilyen helyzetekben kényelmes egy másik fájlban található kész megoldások csatlakoztatása. Ehhez az include konstrukciót használják. A szintaxisa a következő:

tartalmazza a fájlnevet

Csatlakozási példa:

Mellékelt fájl:


Fájl beépítése is lehetséges a követelmény konstrukció használatával. Az include-tól eltérően a programkód végrehajtása előtt tartalmazza a fájlt. Ha a kódban használja a követelményt, ennek a fájlnak csak egy hívása lehetséges. Ha újra hozzáfér, a rendszer globális hibaüzenetet jelenít meg, és leállítja a program végrehajtását.

Az include konstrukció csak a forrást tartalmazza a program végrehajtása során. Támogatja a php fájlok többszöri olvasását. Ha hiba történik, csak egy figyelmeztető üzenet jelenik meg, és a kód végrehajtása a következő sortól folytatódik.

Fájlok megnyitása és bezárása

A php-ben a fájlokkal végzett összes művelet több szakaszban történik:

  • Fájl megnyitása;
  • Tartalomszerkesztés;
  • A fájl bezárása.

Az fopen() függvény a fájl megnyitására szolgál. A szintaxisa a következő:

int fopen(karakterlánc fájlnév, karakterlánc mód [, int use_include_path])

Elfogadott érvek:

  • string fájlnév – a fájl neve vagy abszolút elérési útja. Ha a fájl elérési útja nincs megadva, a rendszer az aktuális könyvtárban keresi. Ha a keresett fájl hiányzik, a rendszer hibaüzenetet jelenít meg. Példa:

  • karakterlánc mód – a fájl megnyitási módját jelzi. Az érv által elfogadott értékek:
  • r – a fájl csak olvasásra nyílik meg, a fájlmutató az elejére kerül;
  • r+ – a fájl nyitva van olvasásra és írásra;
  • w – csak íráshoz hoz létre új fájlt. Ha már létezik azonos nevű fájl, akkor a benne lévő összes adat automatikusan törlődik;
  • w+ - új fájlt hoz létre íráshoz és olvasáshoz. Ha létezik ilyen fájl, az adatait teljesen felülírják újakkal;
  • a – a fájl nyitva van írásra. A mutató a végére kerül. Vagyis a php fájlba írás nem az elejétől, hanem a végétől fog kezdődni;
  • a+ – fájl megnyitása írás-olvasás módban. A felvétel a végétől kezdődik;
  • b – bináris adatokat tartalmazó fájllal való munkavégzés módja (bináris számrendszerben). Ez a mód csak a következőben érhető el operációs rendszer Ablakok.

A fájlhoz való hozzáférés bezárásához használja az fclose() függvényt. Szintaxis:

int fclose (int fájl) , ahol az int fájl a bezárandó webhely leírója.

Minden olvasás vagy írás után a fájlt be kell zárni ezzel a funkcióval. Ellenkező esetben a fájlhoz létrehozott adatfolyam nyitva marad. Ez pedig a szerverkapacitás szükségtelen fogyasztásához vezet.

Példa:

Fájlok olvasása és írása

Egy fájl teljes tartalmának egyszerű megjelenítéséhez a readfile() függvény ideális. A szintaxisa a következő:

readfile (karakterlánc fájlnév) , ahol a fájlnév a karakterlánc fájlneve (nem leíró).


Ugyanez a fájl olvasható az fpassthru() függvény segítségével. Az adatokat a végmutató helyétől a fájl végéig olvassa be. A szintaxisa a következő:

int fpassthru (int fájl)

A funkcióhoz meg kell nyitni és be kell zárni egy fájlt. Példa:

Az eredmény hasonló az előzőhöz.

A php fájlokkal való munkavégzésére szolgáló funkciók lehetővé teszik a tartalom soronkénti és karakterenkénti olvasását:

  • fgets karakterlánc (int fájl, int hosszúság)– a függvény beolvas egy hosszúságú karakterláncot. Példa:

  • string fread (int fájl, int hosszúság)– a művelet megegyezik az előzővel.

Szöveges adatok fájlba írásához két azonos funkció van:

  • int fputok (int fájl, karakterlánc karakterlánc [, int hossza ])
  • int fwrite(int fájl, karakterlánc karakterlánc [, int hossza ])

A függvények egy fájlba int fájlba írnak egy megadott hosszúságú int hosszúságú karakterláncot ( opcionális érv). Példa:

Fájlok létrehozása és törlése

Php fájl létrehozásához használhatja az fopen() függvényt "w" vagy "w+" hozzáférési módban. Vagy a touch() függvény. Beállítja a fájl módosítási idejét. Ha nincs a keresett nevű elem, akkor az létrejön. A szintaxisa.




Top