Php získa informácie o súbore. Získavanie informácií o súbore. Presmerovanie súboru na štandardný výstup

  • 03.11.2019

Funkcia zhromažďuje všetky informácie poskytované operačným systémom pre zadaný súbor a vracia ich ako pole.

Syntax:

Pole stat (reťazec $ názov súboru)

Toto pole vždy obsahuje nasledujúce prvky so zadanými kľúčmi:

0 - zariadenie;
1 - číslo inódu;
2 - atribúty ochrany súborov;
3 - počet synoným („pevných“ odkazov) súboru;
4 - číslo majiteľa;
5 - skupina gid;
6 - typ zariadenia;
7 - veľkosť súboru v bajtoch;
8 - čas posledného prístupu v sekundách od 1. januára 1970;
9 - čas poslednej úpravy obsahu súboru;
10 - čas poslednej zmeny atribútov súboru;
11 - veľkosť bloku;
12 - počet obsadených blokov;

Toto pole obsahuje informácie, ktoré sú k dispozícii v systémoch Unix. V systéme Windows môže byť veľa polí prázdnych.

Ak $ názov súboru určuje skôr symbolický odkaz ako názov súboru, vrátia sa informácie o súbore, na ktorý tento odkaz odkazuje (a nie o prepojení).

fileinode ()

Získajte inódové číslo súboru (PHP 3, PHP 4, PHP 5)

Popis:

Int fileinode (názov súboru reťazca)

Funkcia vráti číslo inodu súboru alebo FALSE pri chybe.

Komentovať

vlastník súborov ()

Získajte ID vlastníka súboru (PHP 3, PHP 4, PHP 5)

Popis:

Majiteľ súboru Int (názov súboru reťazca)

Funkcia vráti číselné ID vlastníka zadaného súboru alebo FALSE pri chybe. Ak chcete získať meno vlastníka ako reťazec, použite funkciu posix_getpwuid ().

Komentovať: Výsledky tejto funkcie sa ukladajú do medzipamäte. Ďalšie informácie nájdete v časti clearstatcache ().

Od verzie PHP 5.0.0 možno túto funkciu použiť aj s niektorými obálkami adries URL.

fileperms ()

Získajte informácie o povolení súborov (PHP 3, PHP 4, PHP 5)

Popis:

Int fileperms (názov súboru reťazca)

Funkcia vráti informácie o právach na zadaný súbor alebo FALSE v prípade chyby.

Komentovať: Výsledky tejto funkcie sa ukladajú do medzipamäte. Ďalšie informácie nájdete v časti clearstatcache ().

Od verzie PHP 5.0.0 možno túto funkciu použiť aj s niektorými obálkami adries URL. Zoznam balíkov podporovaných rodinou funkcií stat () nájdete v prílohe. M.

Odvodenie práv v osmičkovom zobrazení

echo substr (sprintf ("% o", fileperms ("/ tmp")), -4);
echo substr (sprintf ("% o", fileperms ("/ etc / passwd")), -4);
?>

Zobrazí sa:

1777
0644

Zobrazenie všetkých informácií o právach

$ perms \u003d fileperms ("/ etc / passwd");

if (($ perms & 0xC000) \u003d\u003d 0xC000) (
// Zásuvka
$ info \u003d "s";
) elseif (($ perms & 0xA000) \u003d\u003d 0xA000) (
// Symbolický odkaz
$ info \u003d "l";
) elseif (($ perms & 0x8000) \u003d\u003d 0x8000) (
// Zvyčajné
$ info \u003d "-";
) elseif (($ perms & 0x6000) \u003d\u003d 0x6000) (
// Špeciálny blok
$ info \u003d "b";
) elseif (($ perms & 0x4000) \u003d\u003d 0x4000) (
// Adresár
$ info \u003d "d";
) elseif (($ perms & 0x2000) \u003d\u003d 0x2000) (
// Špeciálny znak
$ info \u003d "c";
) elseif (($ perms & 0x1000) \u003d\u003d 0x1000) (
// stream FIFO
$ info \u003d "p";
) inak (
// Neznáme
$ info \u003d "u";
}

// Majiteľ
$ info. \u003d (($ perms & 0x0100)? "r": "-");
$ info. \u003d (($ perms & 0x0080)? "w": "-");
$ info. \u003d (($ perms & 0x0040)?
(($ perms & 0x0800)? "s": "x"):
(($ perms & 0x0800)? "S": "-"));

// Skupina
$ info. \u003d (($ perms & 0x0020)? "r": "-");
$ info. \u003d (($ perms & 0x0010)? "w": "-");
$ info. \u003d (($ perms & 0x0008)?
(($ perms & 0x0400)? "s": "x"):
(($ perms & 0x0400)? "S": "-"));

// Svet
$ info. \u003d (($ perms & 0x0004)? "r": "-");
$ info. \u003d (($ perms & 0x0002)? "w": "-");
$ info. \u003d (($ perms & 0x0001)?
(($ perms & 0x0200)? "t": "x"):
(($ perms & 0x0200)? "T": "-"));

echo $ info;
?>

Výsledok:

R - r - r--

fnmatch ()

Má vzor zhody názvu súboru (PHP 4\u003e \u003d 4.3.0, PHP 5)

Popis:

Bool fnmatch (reťazcový vzor, \u200b\u200breťazcový reťazec [, int vlajky])

fnmatch () skontroluje, či sa zadaný parameter reťazca zhoduje so zadaným zástupným znakom shellu.

Táto funkcia je užitočná pri práci s názvami súborov, aj keď ju možno použiť aj na bežnom riadku. Priemerný používateľ je oboznámený s substitúciami shellu, prinajmenšom v ich najjednoduchšej podobe znaku „?“ a „*“, takže použitie fnmatch () namiesto ereg () alebo preg_match () na prehľadanie prednej časti stránky môže byť oveľa pohodlnejšie pre používateľov, ktorí nepoznajú regulárne výrazy.

Skontroluje, či sa farba zhoduje so zástupným znakom škrupiny.

if (fnmatch ("* gry", $ color)) (
ozvena „nejaká forma šedej ...“;
}
?>

Táto funkcia nie je momentálne k dispozícii v systéme Windows a iných systémoch nekompatibilných s POSIX.

Získava informácie o súbore pomocou ukazovateľa otvoreného súboru (PHP 4, PHP 5)

Popis:

Pole fstat (popisovač prostriedku)

Zhromažďuje štatistické informácie o otvorenom súbore podľa popisovača ukazovateľa súboru. Táto funkcia je podobná stat (), až na to, že pracuje s ukazovateľom otvoreného súboru, nie s menom súboru.

Vráti pole so štatistickými informáciami o súbore; formát poľa je podrobne popísaný na stránke popisu funkcie stat ().

Príklad použitia funkcie fstat ()

// otvoriť súbor
$ fp \u003d fopen ("/ etc / passwd", "r");

// zhromažďovanie štatistík
$ fstat \u003d fstat ($ fp);

// zatvor súbor
fclose ($ fp);

// zobraziť iba asociatívnu časť
print_r (array_slice ($ fstat, 13));

Výsledkom tohto príkladu bude niečo také:

Pole
=> 771
=> 488704
=> 33188
=> 1
=> 0
=> 0
=> 0
=> 1114
=> 1061067181
=> 1056136526
=> 1056136526
=> 4096
=> 8
)

Komentovať: Táto funkcia nie je použiteľná pre prácu so vzdialenými súbormi, pretože k súboru musí byť prístup cez súborový systém servera.

is_writable ()

Určuje, či je do súboru zapisovateľný (PHP 4, PHP 5)

Popis:

Bool je_písateľný (názov súboru reťazca)

Vráti hodnotu TRUE, ak existuje názov súboru a je do neho možné zapisovať. Argumentom názvu súboru môže byť názov adresára, ktorý umožňuje skontrolovať adresáre na uľahčenie zápisu.

Nezabúdajte, že PHP má k súboru prístup ako používateľ, ktorý používa webový server (zvyčajne „nikto“). Obmedzenia núdzového režimu sa neberú do úvahy.

Komentovať: Výsledky tejto funkcie sa ukladajú do medzipamäte. Ďalšie informácie nájdete v časti clearstatcache ().

Od verzie PHP 5.0.0 možno túto funkciu použiť aj v prípade niektorých balíkov adries URL

Získajte informácie o súbore alebo symbolickom odkaze (PHP 3\u003e \u003d 3.0.4, PHP 4, PHP 5)

Popis:

Pole lstat (názov súboru reťazca)

Zhromažďujte štatistiky pre súbor alebo symbolický odkaz s názvom súboru. Táto funkcia je totožná so stat (), s tým rozdielom, že ak je názov súboru symbolickým odkazom, vráti sa stav symbolického odkazu, nie súboru, na ktorý odkazuje.

Na manuálovej stránke funkcie stat () nájdete informácie o štruktúre poľa vráteného programom lstat ().

Komentovať: Výsledky tejto funkcie sa ukladajú do medzipamäte. Ďalšie informácie nájdete v časti clearstatcache ().

Od verzie PHP 5.0.0 možno túto funkciu použiť aj s niektorými obálkami adries URL.

fileatime

Vráti čas posledného prístupu k súboru.

Syntax:

Int fileatime (string filename)

Vráti hodnotu false, ak sa nenájde žiadny súbor.

Atribút posledného času prístupu k súboru sa mení pri každom načítaní údajov súboru. Pretože to výrazne znižuje výkon pri intenzívnej práci so súbormi a adresármi, zmena tohto atribútu je v operačných systémoch často blokovaná a funkcia je potom zbytočná.

filmový čas

Vráti čas poslednej úpravy súboru alebo hodnotu false, ak súbor chýba.

Syntax:

Int filemtime (reťazec $ názov súboru)

filectime

Vráti čas vytvorenia súboru.

Syntax:

Int filectime (reťazec $ názov súboru)

veľkosť súboru

Vráti veľkosť súboru v bajtoch alebo hodnotu false, ak súbor neexistuje.

Syntax:

Int veľkosť súboru (reťazec $ názov súboru)

Nastavuje čas úpravy.

Syntax:

Int touch (reťazec $ názov súboru [, int $ timestamp])

Nastaví čas úpravy zadaného $ súboru na $ timestamp (v sekundách od 1. januára 1970).

Ak druhý parameter nie je zadaný, predpokladá sa aktuálny čas. Pri chybe vráti hodnotu false.

Ak súbor so zadaným názvom neexistuje, vytvorí sa prázdny.

Mení režim prístupu k súboru alebo adresáru (PHP3, PHP4, PHP5)

Popis:

Bool chmod (názov súboru reťazca, režim int)

Pokusy o zmenu režimu prístupu k súboru alebo adresáru odovzdanému v parametri názvu súboru na režim odovzdaný v parametri režim.

Upozorňujeme, že hodnota parametra mode nie je automaticky prevedená na osmičkovú, takže reťazce (napríklad „g + w“) nebudú fungovať podľa očakávania. Aby ste sa ubezpečili, že bol režim nastavený správne, musíte pred hodnotu zadanú v parametri mode uviesť nulu (0):

chmod ("/ somedir / somefile", 755); // desatinné číslo, nesprávna cesta
chmod ("/ somedir / somefile", "u + rwx, go + rx"); // reťazec, nesprávna cesta
chmod ("/ somedir / somefile", 0755); // osmičkový, správny spôsob
?>

Hodnota parametra mode pozostáva z troch osmičkových čísel, ktoré určujú úroveň prístupu pre vlastníka súboru, pre skupinu, do ktorej vlastník patrí, a pre ostatných používateľov. Číslo definujúce úroveň používateľa je možné vypočítať súčtom hodnôt definujúcich práva:

1 - prístup na vykonanie,
2 - prístup na zápis,
4 - prístup na čítanie.

Viac informácií o systéme povolení v systémoch Unix sa dozviete pomocou príkazov „man 1 chmod“ a „man 2 chmod“.

// Prístup pre zápis a čítanie pre vlastníka, žiadny prístup pre ostatných
chmod ("/ somedir / somefile", 0600);
// Prístup vlastníka na zápis a čítanie, prístup ostatných na čítanie
chmod ("/ somedir / somefile", 0644);
// Úplný prístup pre vlastníka, prístup na čítanie a vykonávanie pre ostatných
chmod ("/ somedir / somefile", 0755);
// Úplný prístup pre vlastníka, čítanie a vykonávanie prístupu pre skupinu vlastníkov
chmod ("/ somedir / somefile", 0750);
?>

Vráti hodnotu TRUE pri úspechu alebo hodnotu FALSE pri chybe.

Poznámka: Aktuálny užívateľ je užívateľ, pod ktorým beží PHP. Je možné, že sa tento používateľ bude líšiť od používateľa, pod menom ktorého pristupujete do príkazového shellu alebo účtu FTP.

Poznámka: Táto funkcia nie je použiteľná pre prácu so vzdialenými súbormi, pretože k súboru musí byť prístup cez súborový systém servera.

Poznámka: Keď je povolený bezpečný režim, PHP skontroluje, či má súbor alebo adresár, s ktorým pracujete, rovnaké UID ako vykonávaný skript. Tiež nemôžete nastaviť SUID, SGID a lepiace bity.

(PHP 3, PHP 4, PHP 5)

stat - Získa informácie o súbore

Popis

pole stat (názov súboru reťazca)

Zhromažďuje štatistické informácie o názve súboru. Ak je názov súboru symbolický odkaz, zhromaždia sa informácie o samotnom súbore, nie o prepojení. Funkcia lstat () identické s funkciou stat () okrem toho, že v tomto prípade vráti informácie o samotnom symbolickom odkaze.

V prípade chyby stat () vráti sa NEPRAVDA ... Vydá tiež varovanie.

Vráti pole štatistických informácií o súbore. Pole obsahuje nasledujúce prvky. Indexovanie sa začína na nule. Prístup k ľubovoľnému atribútu je možné získať aj pomocou asociatívneho kľúča, ktorý je označený oproti každému parametru; táto funkcia sa objavila od PHP 4.0.6:

Tabuľka 1. Formát výsledku funkcie stat () a fstat ()

* - k dispozícii iba v systémoch, ktoré podporujú typ st_blksize, ostatné systémy (napr. Windows) vrátia hodnotu -1.

Výzva:Od verzie PHP 5.0.0 možno túto funkciu použiť aj s niektorými obálkami adries URL. Zoznam pakerov podporovaných rodinou funkcií stat (), pozrieť sa do

16,5 tis

V skutočnosti nie je veľký problém otvoriť súbor php. Môže byť ťažšie otvoriť fľašu piva, keď ste uprostred lesa. Myslia si to však iba zanietení programátori. A pre začiatočníkov vám povieme o všetkých možnostiach php pre prácu so súbormi:

Súbory php

Súbory s príponou php obsahujú kód napísaný v programovacom jazyku s rovnakým názvom. Na rozdiel od iných jazykov je php programovací jazyk na strane servera. To znamená, že beží na strane servera. Preto na ladenie jeho kódu musí byť na klientskom počítači nainštalovaný lokálny server.

Na prácu so súbormi php sa používajú špeciálne aplikácie - softvérové \u200b\u200beditory. Najbežnejšie sú:

  • Dreamweaver.
  • PHPEdit.
  • Vývoj jazyka Eclipse PHP.
Pri vytváraní webov založených na php bude možno potrebné znova použiť programový kód. V takýchto situáciách je vhodné zahrnúť hotové riešenia, ktoré sú v inom súbore. Na to sa používa konštrukcia include. Jeho syntax je:

zahrnúť názov súboru

Príklad pripojenia:

Zahrnutý súbor:


Zahrnutie súboru je tiež možné pomocou požadovanej konštrukcie. Na rozdiel od include obsahuje súbor pred vykonaním kódu. Pomocou príkazu require v kóde je možné iba jedno volanie do tohto súboru. Ak to zavoláte znova, systém vydá globálnu chybovú správu a zastaví vykonávanie programu.

Konštrukt include obsahuje zdroj iba počas vykonávania programu. Podporuje viacnásobné čítanie php súborov. Ak dôjde k chybe, zobrazí sa iba varovná správa a vykonávanie kódu bude pokračovať od nasledujúceho riadku.

Otváranie a zatváranie súborov

V php sa všetky operácie so súbormi vykonávajú v niekoľkých fázach:

  • Otvorenie súboru;
  • Editácia obsahu;
  • Zatváranie súboru.

Na otvorenie súboru sa používa funkcia fopen (). Jeho syntax je:

int fopen (názov súboru reťazca, režim reťazca [, int use_include_path])

Prijaté argumenty:

  • string názov súboru - názov súboru alebo absolútna cesta k nemu. Ak cesta k súboru nie je zadaná, bude hľadaný v aktuálnom adresári. Ak hľadaný súbor chýba, systém zobrazí chybové hlásenie. Príklad:

  • režim reťazca - označuje režim otvorenia súboru. Hodnoty akceptované argumentom:
  • r - súbor je otvorený iba na čítanie, ukazovateľ súboru je nastavený na začiatku;
  • r + - súbor je otvorený na čítanie a zápis;
  • w - vytvorí sa nový súbor iba na zápis. Ak súbor s rovnakým názvom už existuje, automaticky odstráni všetky údaje;
  • w + - vytvorí sa nový súbor na zápis a čítanie. Ak taký súbor existuje, jeho údaje sú úplne prepísané novými;
  • a - súbor je otvorený na zápis. Ukazovateľ je umiestnený na konci. To znamená, že zápis do súboru php sa nezačne od začiatku, ale od konca;
  • a + - otvorenie súboru v režime čítania a zápisu. Nahrávanie sa začne od konca;
  • b - režim práce so súborom obsahujúcim binárne údaje (v systéme binárnych čísel). Tento režim je k dispozícii iba v operačnom systéme Windows.

Ak chcete zatvoriť prístup k súboru, použite funkciu fclose (). Syntax:

int fclose (int súbor), kde int súbor je popisovač, ktorým sa má web zavrieť.

Po každom prečítaní alebo zápise musí byť súbor pomocou tejto funkcie uzavretý. V opačnom prípade zostane stream vytvorený pre súbor otvorený. A to vedie k zbytočnej spotrebe kapacity servera.

Príklad:

Čítanie a zápis súborov

Funkcia readfile () je ideálna na jednoduché zobrazenie celého obsahu súboru. Jeho syntax je:

readfile (názov súboru reťazca), kde názov súboru reťazca je názov súboru reťazca (nie deskriptor).


Rovnaký súbor je možné načítať pomocou funkcie fpassthru (). Číta dáta od koncovej polohy ukazovateľa po koniec súboru. Jeho syntax:

int fpassthru (int súbor)

Táto funkcia vyžaduje otvorenie a zatvorenie súboru. Príklad:

Výsledok je podobný predchádzajúcemu.

Funkcie pre prácu so súbormi v php vám umožňujú čítať obsah riadok po riadku a znak po znaku:

  • reťazec fgets (int súbor, int dĺžka) - funkcia načíta reťazec s dĺžkou. Príklad:

  • string fread (int súbor, int dĺžka)- akcia je totožná s predchádzajúcou.

Existujú dve rovnaké funkcie na zápis textových údajov do súboru:

  • int fputs (int súbor, reťazec reťazca [, int dĺžka])
  • int fwrite (int súbor, reťazec reťazca [, int dĺžka])

Funkcie zapíšu do súboru int súbor reťazec reťazec reťazec zadanej dĺžky int dĺžka ( voliteľný argument). Príklad:

Vytváranie a mazanie súborov

Na vytvorenie súboru php môžete použiť funkciu fopen () v režime prístupu „w“ alebo „w +“. Alebo funkcia touch (). Nastavuje čas úpravy súboru. Ak neexistuje žiadny prvok s požadovaným názvom, vytvorí sa. Jeho syntax.

Úloha
Musíte si prečítať metaúdaje súboru, napríklad povolenia a meno vlastníka.

Rozhodnutie
Zavolajte stat (), ktorá vráti pole informácií o súbore:

$ info \u003d stat ("harpo.php");

Diskusia
Funkcia stat () vracia pole informácií o súbore s číselnými aj reťazcovými indexmi.

Prvok režimu vráteného poľa obsahuje povolenia ako celé číslo základne 10. To je mätúce, pretože povolenia sú zvyčajne vyjadrené buď symbolicky (tj. Výstup z ls -rw-r - r--) alebo ako osmičkový čísla (t.j. 0644). Funkcia base_convert () umožňuje prevádzať povolenia do zrozumiteľnejšieho formátu, ktorý prevádza povolenia na osmičkové číslo:

$ file_info \u003d stat ("/ tmp / session.txt");
$ permissions \u003d base_convert ($ file_info ["mode"], 10,8);

Výsledkom je šesťmiestne osmičkové číslo. Napríklad ak príkaz ls zobrazuje o /tmp/session.txt toto:

Potom je hodnota prvku $ file_info ["mode"] 33204 a hodnota premennej $ permissions je 100664.

Posledné tri číslice (664) definujú prístupové práva k súboru: používateľ (čítanie a zápis), skupina (čítanie a zápis) a všetci ostatní (čítanie). Tretia číslica, 0, znamená, že pre súbor nie je nastavený ani setuid bit, ani bit setgid. Číslo 10 úplne vľavo naznačuje, že sa jedná o bežný súbor (nie soket, symbolický odkaz alebo iný špeciálny súbor).

Pretože funkcia stat () vracia pole s číselnými aj reťazcovými indexmi, v dôsledku vykonania slučky foreach na tomto poli dostaneme dve kópie každej hodnoty. Takže musíme odkázať na slučku for z prvku 0 do prvku 12 vráteného poľa.

Fstat () je podobný stat () a berie ako argument deskriptor súboru (vrátený fopen () alebo popen ()). Fstat () je možné použiť iba na miestne súbory a nemožno ho použiť na adresy URL odovzdané do fopen ().
Funkcia PHP stat () umožňuje drahé základné systémové volanie (2).

PHP ukladá do pamäte výsledky hovoru stat (2), aby sa minimalizovala réžia. Preto ak voláte stat () v súbore, zmeňte jeho povolenia a voláte stat () znova v rovnakom súbore, získate rovnaké výsledky. Ak chcete PHP prinútiť preťažiť metaúdaje súboru, zavolajte funkciu clearstatcache (), ktorá vyprázdni informácie o vyrovnávacej pamäti PHP. PHP túto cache potrebuje aj pre ďalšie funkcie, ktoré vracajú metadáta:

File_exists (), fileatime (), filectime (), filegroup (), fileinode (), filemtime (), fileowner (),
fileperms (), filesize (), filetype (), fstat (), is_dir (), is_executable (), is_file (), is_link (), is_readable (), is_writable (), a lstat ().

Pred pokusom o prácu so súborom je vhodné ubezpečiť sa, že existuje. Na splnenie tejto úlohy sa bežne používajú dve funkcie:

file_exists () a is_file ().

Funkcia f ilе_exists () kontroluje, či zadaný súbor existuje. Ak súbor existuje, funkcia vráti hodnotu TRUE, inak vráti hodnotu FALSE. Syntax pre funkciu file_exists () je:

bool file_exists (string file)

Príklad kontroly existencie súboru:

if (! file_exists ($ filename)):

vypísať "Súbor $ názov súboru neexistuje!";

is_file ()

Funkcia is_file () kontroluje existenciu zadaného súboru a schopnosť vykonávať operácie čítania a zápisu na ňom. V podstate je is_file () robustnejšia verzia file_exists (), ktorá nielen kontroluje, či súbor existuje, ale aj to, či dokáže čítať a zapisovať údaje:

bool is_file (string file)

Nasledujúci príklad ukazuje, ako overiť, či súbor existuje a je možné s ním pracovať:

$ file \u003d "somefile.txt";

if (is_file ($ file)):

print "Súbor $ súbor je platný a existuje!";

print "Súbor $ file neexistuje alebo nie je platným súborom!";

Po skontrolovaní, či požadovaný súbor existuje a či s ním môžete vykonávať rôzne operácie čítania a zápisu, môžete prejsť k ďalšiemu kroku - otvoreniu súboru.

Funkcia Filesize () vráti veľkosť (v bajtoch) súboru s daným názvom alebo FALSE v prípade chyby. Syntax pre funkciu filesize () je:

int veľkosť súboru (názov súboru reťazca)

Povedzme, že chcete určiť veľkosť súboru pastry.txt. Pomocou funkcie filesize () môžete získať požadované informácie:

$ fs \u003d veľkosť súboru ("pastry.txt"); print "Pastry.txt je $ fs bajtov.";

Zobrazí sa nasledujúci výstup:

Pastry.txt má 179 bajtov.

Pred vykonaním operácií so súborom ho musíte otvoriť a spojiť s popisovačom súboru. Po dokončení práce so súborom ho zatvorte. Tieto témy sú popísané v nasledujúcej časti.

Otváranie a zatváranie súborov

Pred vykonaním I / O operácií so súborom ho musíte otvoriť pomocou funkcie fopen ().

Funkcia fopen () otvorí súbor (ak existuje) a vráti celé číslo - tzv manipulátor súborov (úchyt súboru). Syntax funkcie fopen () je:

int fopen (reťazcový súbor, režim reťazca [, int enable_path])

Otvorený súbor môže byť uložený v lokálnom systéme súborov, existovať ako štandardný vstupný / výstupný prúd alebo prezentovať súbor vo vzdialenom systéme prijatom cez HTTP alebo FTP.

Parameter súboru je možné určiť v niekoľkých formách, ktoré sú uvedené nižšie:

Ak parameter obsahuje názov lokálneho súboru, fopen () otvorí tento súbor a vráti popisovač.

Ak je parameter zadaný ako php: // stdin, php: // stdout alebo php: // stderr, otvorí sa zodpovedajúci štandardný vstupný / výstupný prúd.

Ak parameter začína predponou http: //, funkcia otvorí pripojenie HTTP k serveru a vráti popisovač pre zadaný súbor.

Ak parameter začína predponou ftp: //, funkcia otvorí pripojenie FTP k serveru a vráti popisovač pre zadaný súbor. V takom prípade by ste mali venovať osobitnú pozornosť dvom veciam: ak server nepodporuje pasívne FTP, hovor fopen () zlyhá. Okrem toho sa otvárajú súbory FTP na čítanie alebo zápis.

Pri práci v pasívnom režime server YR čaká na pripojenie zo strany klienta. Pri prevádzke v aktívnom režime nadväzuje server sám spojenie s klientom. Predvolený je zvyčajne aktívny režim.

Parameter režimu určuje schopnosť čítať a zapisovať do súboru. Tabuľka 7.1 uvádza zoznam niektorých hodnôt, ktoré určujú režim otvárania súborov.

Tabuľka 7.1. Režimy otvorenia súboru

Režim Popis
Iba čítanie. Ukazovateľ aktuálnej polohy je nastavený na začiatok súboru
r + Čítanie a písanie. Ukazovateľ aktuálnej polohy je nastavený na začiatok súboru
w Iba napíš. Ukazovateľ aktuálnej polohy je nastavený na začiatok súboru a celý obsah súboru je zničený. Ak súbor neexistuje, funkcia sa ho pokúsi vytvoriť
w + Čítanie a písanie. Ukazovateľ aktuálnej polohy je nastavený na začiatok súboru a celý obsah súboru je zničený. Ak súbor neexistuje, funkcia sa ho pokúsi vytvoriť
a Iba napíš. Ukazovateľ aktuálnej polohy je umiestnený na konci súboru. Ak súbor neexistuje, funkcia sa ho pokúsi vytvoriť
a + Čítanie a písanie. Ukazovateľ aktuálnej polohy je umiestnený na konci súboru. Ak súbor neexistuje, funkcia sa ho pokúsi vytvoriť

Ak je voliteľný tretí parameter include_path 1, potom je cesta k súboru relatívna k adresáru zahrňujúcich súborov uvedenému v súbore php.ini (pozri kapitolu 1).

Nižšie je uvedený príklad otvorenia súboru pomocou fopen (). Die (), používaný v spojení s fopen (), poskytuje chybové hlásenie, ak súbor nemožno otvoriť:

$ file \u003d "userdata.txt"; // Nejaký súbor

$ fh \u003d fopen ($ súbor, "a +") alebo zomrieť ("Súbor ($ súbor) neexistuje!");

Nasledujúci úryvok otvára pripojenie k serveru PHP (http://www.php.net):

$ site \u003d "http://www.php.net": // Server prístupný cez HTTP

$ sh \u003d fopen ($ site., "r"); // Zviažte manipulátor na stránku indexu php.net

Po dokončení by mal byť súbor vždy uzavretý funkciou fclose ().

Funkcia fclose () zatvorí súbor so zadanou rukoväťou. Vráti TRUE pri úspešnom uzavretí, FALSE pri zlyhaní. Syntax pre funkciu fclose () je:

int fclose (int manipulátor)

Funkcia fclose () úspešne zavrie iba tie súbory, ktoré boli predtým otvorené pomocou fopen () alebo fsockopen (). Príklad uzavretia súboru:

$ file \u003d "userdata.txt";

if (file_exists ($ file)):

$ fh \u003d fopen ($ súbor, "r");

// Vykonajte operácie so súbormi

vypísať "Súbor súborov neexistuje!";

Napíšte do súboru

S otvorenými súbormi sa vykonávajú dve hlavné operácie - čítanie a zápis.

Funkcia is_writeable () vám umožňuje overiť, či súbor existuje a je zapisovateľný. Prepisovateľnosť sa kontroluje pre súbor aj pre adresár. Syntax pre funkciu is_writeable () je:

bool is_writeable (súbor reťazca)

Jeden dôležitý bod: PHP bude s najväčšou pravdepodobnosťou fungovať pod ID používateľa používaným webovým serverom (zvyčajne „nikto“). Príklad použitia is_writeable () nájdete vo funkcii fwrite ().

Funkcia fwrite () zapíše obsah premennej reťazca do súboru určeného popisovačom súboru. Syntax funkcie fwrite () je:

int fwrite (int manipulátor, reťazcová premenná [, int dĺžka])

Ak sa volanie funkcie odovzdá voliteľný parameter dĺžky, nahrávanie sa zastaví buď po napísaní zadaného počtu znakov, alebo po dosiahnutí konca riadku. Kontrola zapisovateľnosti súboru je demonštrovaná v nasledujúcom príklade:

// Informácie o premávke na stránke používateľa

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

$ názov súboru \u003d "somefile.txt";

// Ak súbor existuje a je možné ho zapísať

if (is_writeable ($ filename)):

$ fh \u003d fopen ($ názov súboru, "a +");

// Zapíše obsah $ dát do súboru

$ success - fwrite ($ fh, $ data);

// Zatvoriť súbor

fclose ($ fh); inak:

tlač "Nepodarilo sa otvoriť názov súboru na písanie";

Funkcia fputs () je alias pre fwrite () a dá sa použiť všade, kde sa používa fwrite ().

Funkcia fputs () je alias pre fwrite () a má úplne rovnakú syntax. Syntax funkcie fputs () je:

int fputs (int manipulátor, reťazcová premenná [, int dĺžka])

Ja osobne preferujem použitie fputs (). Pamätajte, že je to iba otázka štýlu a nemá to nič spoločné s rozdielom medzi týmito dvoma funkciami.

Čítanie zo súboru

Čítanie je nepochybne najdôležitejšou operáciou vykonanou so súbormi. Niektoré z funkcií, ktoré zefektívňujú čítanie zo súboru, sú opísané nižšie. Syntax týchto funkcií takmer presne kopíruje syntax podobných funkcií zápisu.

Funkcia i s_readable () vám umožňuje overiť, či súbor existuje a je čitateľný. Kontroluje sa čitateľnosť súboru aj adresára. Syntax pre funkciu is_readable () je:

boo! je_čitateľný (súbor reťazca)

S najväčšou pravdepodobnosťou bude PHP bežať pod ID používateľa používaným webovým serverom (zvyčajne „nikto“), takže ak má funkcia is_readable () vrátiť hodnotu TRUE, musí mať každý dovolené čítať zo súboru. Nasledujúci príklad ukazuje, ako zabezpečiť, aby súbor existoval a bol čitateľný:

if (is_readable ($ filename)):

// Otvorte súbor a nastavte aktuálnu pozíciu na koniec súboru

$ fh \u003d fopen ($ názov súboru, "r");

vypísať "$ názov súboru nie je čitateľný!";

Funkcia fread () načíta zadaný počet bajtov zo súboru určeného popisovačom súboru. Syntax pre funkciu fwrite () je:

int fread (int manipulátor, int dĺžka)

Manipulátor musí odkazovať na otvorený čitateľný súbor (pozri popis funkcie is_readable ()). Čítanie sa zastaví, keď sa načíta zadaný počet bajtov alebo keď sa dosiahne koniec súboru. Zvážte textový súbor pastry.txt zobrazený v zozname 7.1. Čítanie a zobrazovanie tohto súboru v prehliadači sa vykonáva pomocou nasledujúceho úryvku:

$ fh \u003d fopen ("pastry.txt", "r") alebo zomrieť ("Nemôžem otvoriť súbor!");

$ file \u003d fread ($ fh, veľkosť súboru ($ fh));

Použitím funkcie fllesize () na určenie veľkosti súboru pastry.txt v bajtoch zaistíte, že funkcia fread () prečíta celý obsah súboru.

Výpis 7.1. Textový súbor Pastry.txt

Recept: Pečivo

1 1/4 šálky univerzálnej múky

3/4 tyčinky (6 lyžíc) nesoleného masla, nasekané

2 lyžice zeleninového tuku, 1/4 lyžičky soli

3 lyžice vody

Funkcia fgetc () vracia reťazec obsahujúci jeden znak zo súboru na aktuálnej pozícii ukazovateľa, alebo FALSE po dosiahnutí konca súboru. Syntax pre funkciu fgetc () je:

string fgetc (int manipulátor)

Manipulátor musí odkazovať na otvorený čitateľný súbor (pozri funkciu is_readable () skôr v tejto kapitole). Nasledujúci príklad demonštruje načítanie a výstup súboru po znaku pomocou funkcie fgetc ():

$ fh \u003d fopen ("pastry.txt", "r"); while (! feof ($ fh)):

$ char \u003d fgetc ($ fh):

tlačiť $ char; nakoniec;

Funkcia fgets () vracia načítaný reťazec z aktuálnej polohy ukazovateľa v súbore určenom popisovačom súboru. Ukazovateľ súboru musí smerovať na otvorený súbor, ktorý sa dá čítať (pozri funkciu is_readable () skôr v tejto kapitole). Syntax pre funkciu fgets () je:

reťazec fgets (int manipulátor, int dĺžka)

Čítanie sa zastaví, ak je splnená jedna z nasledujúcich podmienok:

  • dĺžka načítaná zo súboru - 1 bajt;
  • zo súboru bol načítaný znak nového riadku (zahrnutý vo vrátenom reťazci);
  • zo súboru sa načítal znak konca súboru (EOF).

Ak chcete usporiadať čítanie súboru po riadkoch, zadajte do druhého parametra hodnotu, ktorá zjavne presahuje počet bajtov v riadku. Príklad čítania a výstupu súboru po riadku:

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

while (! feof ($ fh));

$ line \u003d fgets ($ fh, 4096);

vytlačiť $ line. „
";

Funkcia fgetss () je až na jednu výnimku úplne podobná funkcii fgets () - snaží sa z prečítaného textu odstrániť všetky značky HTML a PHP:

string fgetss (Int manipulator, int length [, string allowed_tags])

Predtým, ako prejdete k príkladom, prečítajte si obsah záznamu 7.2 - tento súbor sa používa v zozname 7.3 a 7.4.

Výpis 7.2. Súbor Science.html

Najnovšie správy - veda

Objavená mimozemská forma života


20. augusta 2000

Skoro dnes ráno sa zistilo, že v skrini starej bytovej chladničky W. J. Gilmora rastie zvláštna nová forma huby. Nie je známe, či v tomto vývoji pomohlo aj silné žiarenie vychádzajúce z počítačového monitora nájomcu.

Výpis 7.3. Odstránenie značiek zo súboru HTML pred zobrazením v prehliadači

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

while (! feof ($ fh)):

print fgetss ($ fh, 2048);

Výsledok je uvedený nižšie. Ako vidíte, všetky značky HTML boli odstránené zo súboru science.html, čo má za následok stratu formátovania:

V niektorých situáciách sú zo súboru odstránené všetky značky, okrem niektorých - napríklad značky zalomenia riadku
... Ako sa to deje, ukazuje zoznam 7.4.

Výpis 7.4. Selektívne odstráňte značky zo súboru HTML

$ fh \u003d fopenC "science.html", "r");

$ allowable \u003d "
";

while (! feof ($ fh)):

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

Výsledok:

Najnovšie správy - Vedci objavili formu života mimozemšťana 20. augusta 2000 Skoro ráno sa v skrini starej bytovej chladničky WJ Gilmorovej našla zvláštna nová forma huby. Nie je známe, či z počítača nájomcu vyzařuje silné žiarenie. monitor pomohol v tomto vývoji.

Ako vidíte, funkcia fgetss () uľahčuje prevod súborov, najmä ak máte veľa súborov HTML naformátovaných podobným spôsobom.

Čítanie súboru do poľa

Funkcia file () načíta celý obsah súboru do indexovateľného poľa. Každý prvok poľa zodpovedá jednému riadku súboru. Syntax pre funkciu filе () je:

súbor poľa (súbor reťazca [, int path_include])

Ak je voliteľný tretí parameter include_path 1, potom je cesta k súboru relatívna k adresáru zahrnutých súborov uvedenému v súbore php.ini (pozri kapitolu 1). Zoznam 7.5 používa funkciu file () na načítanie súboru pastry.txt (pozri zoznam 7.1).

$ file_array \u003d súbor ("pastry.txt");

while (list ($ line_num. $ line) \u003d eacht ($ file_array)):

tlačiť " Riadok $ line_num: ", htmlspecialchars ($ line),"
\\ n "

Každý riadok poľa je zobrazený spolu s číslom:

Riadok 0: Recept: Pečivo

Riadok 1: 1 1/4 šálky univerzálnej múky

Riadok 2: 3/4 tyčinky (6 lyžíc) nesoleného masla, nasekané

3. riadok: 2 lyžice zeleninového tuku

4. riadok: 1/4 lyžičky soli

Riadok 5: 3 lyžice vody

Presmerovanie súboru na štandardný výstup

Funkcia readfile () načíta obsah súboru a nasmeruje ho na štandardný výstup (vo väčšine prípadov do prehliadača). Syntax pre funkciu readfile () je:

int readfile (string file [, int path_include])

Funkcia vráti počet prečítaných bajtov. Súbor môže byť umiestnený v lokálnom súborovom systéme, existuje ako štandardný vstupno-výstupný tok alebo môže predstavovať súbor vo vzdialenom systéme prijatý prostredníctvom protokolu HTTP alebo FTP. Parameter súboru sa nastavuje podľa rovnakých pravidiel ako vo funkcii fopen ().

Predpokladajme, že máte súbor latorre.txt, ktorý chcete zobraziť v prehliadači:

Reštaurácia „La Torre.“ Nachádza sa v talianskom Nettune a ponúka eklektickú zmes štýlu. história a vynikajúca morská kuchyňa. V stenách stredovekého borga obklopujúceho mesto je možné stolovať pri pozorovaní okoloidúceho obchodu v dedinských butikoch. Komfort spojený s iba najčerstvejšou morskou dopravou robí z La Torre jednu z najlepších talianskych reštaurácií.

Po vykonaní nasledujúceho úryvku sa všetok obsah súboru latorre.txt odošle do štandardného výstupného toku:

$ restaurant_file \u003d "latorre.txt";

// Pošle celý súbor na štandardný výstup

readfile ($ restaurant_file);

Otvorenie popisovača procesných súborov

Spolu s bežnými súbormi môžete otvoriť manipulátory súborov, ktoré umožňujú interakciu s procesmi na serveri. Problém je vyriešený funkciou poren (), ktorá má nasledujúcu syntax:

int popen (príkaz reťazca, režim reťazca)

Parameter príkazu definuje systémový príkaz, ktorý sa má vykonať, a parameter mode popisuje režim prístupu:

// Otvorte súbor „korenie.txt“ na písanie

$ fh \u003d fopen ("korenie.txt", "w");

// Pridajte viac riadkov textu

fputs ($ fh, "petržlen, šalvia, rozmarín \\ n");

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

fputs ($ fh, "Bazalka, šalvia, zázvor \\ n");

// Zatvorte manipulátor

// Otvorte UNP grep proces a vyhľadajte Basil v korení.txt

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

// Tlačový výstup z grep

Výsledok vyzerá takto:

Bazalka, šalvia, zázvor

Funkcia fpassthru () je analogická s funkciou passthru () popísanou v tejto kapitole v časti „Spustenie externých programov“.

Po dokončení všetkých operácií musí byť súbor alebo proces uzavretý. Funkcia pclose () uzatvára spojenie s procesom špecifikovaným manipulátorom, podobne ako fclose () zatvára súbor otvorený pomocou fopen (). Syntax pre pclose () je:

int pclose (int manipulátor)

V parametri manipulátor manipulátor prijatý skôr z úspešného hovoru na poren () je odovzdaný.

Otvorenie zásuvky

PHP sa neobmedzuje iba na interakciu so súbormi a procesmi - spojenia môžete nadviazať aj cez zásuvky. Zásuvka (socket) je softvérová abstrakcia, ktorá umožňuje komunikáciu s rôznymi službami na inom počítači.

Funkcia fsockopen () ustanovuje soketové pripojenie k serveru na internete

cez TCP alebo UDP. Syntax funkcie fsockopen () je:

int fsockopen (reťazcový uzol, int port [, int error_code [, string error_text [, int timeout]]]))

Voliteľné parametre error_code a error_text obsahujú informácie, ktoré sa zobrazia, ak zlyhá pripojenie k serveru. Oba parametre musia byť odovzdané odkazom. Tretí voliteľný parameter, časový limit, určuje, ako dlho sa má čakať na odpoveď zo servera (v sekundách). Zoznam 7.6 ukazuje, ako používať fsockopen () na získanie informácií o serveri. Predtým, ako sa pozriete na zoznam 7.6, musíte sa však oboznámiť s ďalšou funkciou, socket_set_blocking ().

UDP (User Datagram Protocol) je komunikačný protokol bez pripojenia.

socket_set_blocking ()

Funkcia Socket_set_b1ocki ng () umožňuje ovládať časový limit pre operácie so serverom:

socket_set_blocking (int manipulátor, logický režim)

Parameter handle určuje predtým otvorený soket a parameter mode určuje režim, do ktorého sa soket prepne (TRUE pre režim blokovania, FALSE pre režim bez blokovania). Príklad použitia funkcií fsockopen () a socket_set_blocking () je uvedený v zozname 7.6.

Výpis 7.6. Používanie fsockopen () na získanie informácií o serveri

funkcia getthehost ($ host. $ cesta) (

// Otvorené pripojenie k uzlu

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

// Prepne do režimu blokovania

socket_set_blocking ($ fp, 1),

// Poslať hlavičky

fputs ($ fp, "ZÍSKAŤ $ cestu HTTP / 1.1 \\ r \\ n");

fputs ($ fp, "Hostiteľ: $ host \\ r \\ n \\ r \\ n"); $ x \u003d 1;

// Získajte hlavičky

while ($ x< 10) :

$ hlavičky \u003d fgets ($ fp, 4096);

// Zatvorte manipulátor

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

Výpis 7.6 produkuje nasledujúci výstup:

НТТР / 1,1 200 OK Server: Microsoft-IIS / 4.0 Umiestnenie obsahu:

2000 20:25:06 GMT Eag: "f0a61666dbff1bf1: 34a5" Obsahová dĺžka: 1311

Funkcia pfsockopen () je trvalá verzia fsockopen (). To znamená, že pripojenie sa automaticky neukončí, keď sa skončí skript, v ktorom sa funkcia volala. Syntax funkcie pfsockopen () je:

int pfsockopen (reťazcový uzol, int port [, int chybový_kód [, textový_server reťazca [, int časový limit]]]))

V závislosti od konkrétneho účelu vašej aplikácie môže byť pohodlnejšie použiť namiesto fsockopen () pfsockopen ().

Spúšťanie externých programov

Skripty PHP môžu tiež spúšťať programy umiestnené na serveri. Táto funkcia sa obzvlášť často používa pri správe systému prostredníctvom webového prehliadača, ako aj na pohodlnejšie získanie súhrnných informácií o systéme.

Funkcia exec () spustí zadaný program a vráti posledný riadok jeho výstupu. Syntax pre funkciu exec () je:

string exec (reťazec príkaz [, reťazec pole [, int návrat]])

Poznámka: funkcia exec () vykoná iba príkaz bez zobrazenia výsledkov svojej práce. Všetky výstupy príkazov je možné uložiť do voliteľného poľa parametrov. Okrem toho, ak je zadaná návratová premenná tiež zadaná pre dané pole parametrov, je jej posledne priradený návratový kód vykonaného príkazu.

Zoznam 7.7 ukazuje, ako používať funkciu exec () na spustenie funkcie ping systému UNIX.

Výpis 7.7. Kontrola spojenia so serverom pomocou funkcie exec ()

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

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

pre ($ i \u003d 0; $ i< count($ping);$i++) :

tlačiť "
$ ping [$ i] ";

Výsledok:

PING www.php.net (208.247.106.187): 56 dátových bajtov

64 bajtov od 208.247.106.187: icmp_seq \u003d 0 ttl \u003d 243 čas \u003d 66,602 ms

64 bajtov od 208.247.106.187: icmp_seq \u003d 1 ttl \u003d 243 čas \u003d 55,723 ms

64 bajtov od 208.247.106.187: icmp_seq \u003d 2 ttl \u003d 243 čas \u003d 70,779 ms

64 bajtov od 208.247.106.187: icmp_seq \u003d 3 ttl \u003d 243 čas \u003d 55,339 ms

64 bajtov od 208.247.106.187: icmp_seq \u003d 4 ttl \u003d 243 čas \u003d 69,865 ms

Štatistika ping na webe www.php.net -

5 prenesených paketov. Prijatých 5 paketov. 0% strata paketov

spiatočná doba min. / priem. / max. / stddev - 55,339 / 63,662 / 70,779 / 6,783 ms

Backticks

Existuje ďalší spôsob vykonávania systémových príkazov, ktorý nevyžaduje volanie funkcií - vykonávaný príkaz je uzavretý v znakoch spätnej väzby („“) a výsledky jeho práce sa zobrazujú v prehľadávači. Príklad:

tlačiť "

$ výstup
";

Tento úryvok odosiela obsah adresára obsahujúceho skript do prehliadača.

Interný parameter ping -c 5 (-n 5 v systéme Windows) určuje počet dotazov servera.

Ak chcete iba vrátiť neformátované výsledky príkazov, použite funkciu passthru () popísanú nižšie.

Funkcia passthru () funguje takmer rovnako ako exec (), až na jednu výnimku - automaticky vytlačí výstup príkazu. Syntax pre funkciu passthru () je:

void passthru (príkaz reťazca [, int návrat])

Ak je pri volaní passthru () odovzdaný voliteľný parameter návratu, tejto premennej sa priradí návratový kód vykonaného príkazu.

escapeshellcmd ()

Funkcia escapeshellcmd () uniká všetkým potenciálne nebezpečným znakom, ktoré môže užívateľ zadať (napríklad do formulára HTML) na vykonávanie príkazov exec (), passthru (), system () alebo popn (). Syntax:

string escapeshellcmd (príkaz reťazca)

So vstupom používateľa by sa malo vždy zaobchádzať opatrne, avšak aj potom môžu používatelia zadávať príkazy, ktoré sa vykonajú funkciami spúšťania systémových príkazov. Zvážte nasledujúci úryvok:

$ user_input \u003d `rm -rf *`; // Odstráni nadradený adresár a všetky jeho podadresáre

exec ($ user_input); // Vykonať $ user_input !!!

Ak neurobíte žiadne preventívne opatrenia, takýto príkaz povedie ku katastrofe. Môžete však použiť funkcie escapeshellcmd () na únik od vstupu používateľa:

$ user_input \u003d `rm - rf *`; // Odstráni nadradený adresár a všetky jeho podadresáre

exec (escapeshellcmd ($ user_input)); // Uniknite nebezpečným znakom

Funkcia escapeshellcmd () uniká znaku *, aby zabránila katastrofickému vykonaniu príkazu.

Zabezpečenie je jedným z najdôležitejších aspektov webového programovania, preto som sa tejto téme a jej vzťahu k programovaniu v PHP venoval celú kapitolu. Viac informácií nájdete v kapitole 16.

Práca so súborovým systémom

PHP poskytuje funkcie na prezeranie a vykonávanie rôznych operácií so súbormi na serveri. Informácie o atribútoch súborov servera (umiestnenie, vlastník a oprávnenie) sú často užitočné.

Funkcia basename () extrahuje názov súboru z odovzdaného kvalifikovaného názvu. Syntax pre funkciu basename () je:

string basename (string full_name)

Extrakcia názvu základného súboru z celého názvu je nasledovná:

$ path \u003d "/usr/local/phppower/htdocs/index.php"; $ file \u003d basename ($ cesta); // $ file \u003d "index.php"

Táto funkcia v skutočnosti odstráni cestu z celého názvu a ponechá iba názov súboru.

Funkcia getlastmod () vracia dátum a čas poslednej úpravy stránky, z ktorej sa funkcia volá. Syntax pre funkciu getlastmod () je:

int getlastmod (neplatný)

Návratová hodnota je vo formáte dátumu a času v systéme UNIX a je možné ju formátovať pomocou funkcie date (). Nasledujúci úryvok zobrazuje dátum, kedy bola stránka naposledy zmenená:

echo "Posledná úprava:" .date ("H: i: s a". getlastmod ());

Funkcia stat () vráti indexovateľné pole s podrobnými informáciami o súbore s daným názvom:

pole stat (názov súboru reťazca)

V prvkoch poľa sa vrátia nasledujúce informácie:

0 Konštrukcia

2 Režim ochrany inódy

3 Počet odkazov

4 ID používateľa majiteľa

5 ID skupiny vlastníka

6 Typ zariadenia inode

7 Veľkosť v bajtoch

8 Čas posledného prístupu

9 Čas poslednej úpravy

10 Čas poslednej zmeny

11 Veľkosť bloku pre I / O v súborovom systéme

12 Počet pridelených blokov

Ak teda chcete poznať čas posledného prístupu k súboru, pozrite si prvok 8 vráteného poľa. Uvažujme príklad:

$ súbor - "datafile.txt";

zoznam ($ dev, $ inode, $ inodep, $ nlink, $ uid, $ gid, $ inodev, $ veľkosť, $ atime, $ mtime, $ ctime,

$ bsize) \u003d stat ($ súbor);

print "$ súbor je $ veľkosť bajtov.
";

print "Čas posledného prístupu: $ atime
";

print "Čas poslednej úpravy: $ mtime
";

Výsledok:

popen.php je 289 bajtov.

Posledný čas prístupu: 15. augusta 2000 12:00:00

Čas poslednej úpravy: 15. augusta 2000 10:07:18

V tomto príklade som použil konštrukciu list () na pomenovanie každej návratovej hodnoty. Samozrejme, rovnako dobre môžete vrátiť pole, prehrabať sa v prvkoch a zobraziť všetky potrebné informácie. Ako vidíte, funkcia stat () poskytuje rôzne užitočné informácie o súbore.

Zobrazenie a zmena charakteristík súboru

Každý súbor v systémoch UNIX má tri dôležité vlastnosti:

  • príslušnosť k skupine;
  • vlastník;
  • povolenia.

Všetky tieto charakteristiky je možné zmeniť pomocou príslušných funkcií PHP. Funkcie popísané v tejto časti nefungujú v systémoch rodiny Windows.

Ak ste v operačných systémoch UNIX nováčikom, informácie o špecifikáciách súborového systému UNIX nájdete na adrese http://sunsite.auc.dk/linux-newbie/FAQ2.htm. Členstvo v skupine, vlastníctvo a povolenia sú popísané v časti 3.2.6.

Funkcia chgrp () sa pokúsi zmeniť skupinu, do ktorej uvedený súbor patrí. Syntax funkcie chgrp () je:

int chgrp (názov súboru reťazca, zmiešaná skupina)

Funkcia filegroup () vráti ID skupiny vlastníka súboru s daným menom alebo FALSE v prípade chyby. Syntax pre funkciu filegroup () je:

int skupina súborov (názov súboru reťazca)

Funkcia chmod () mení povolenia súboru s daným menom. Syntax funkcie chmod () je:

int chmod (názov súboru reťazca, povolenia int)

Povolenia sú v osmičkovej sústave. Špecifiká nastavenia parametra funkcie chmod () sú demonštrované v nasledujúcom príklade:

chmod ("data_file.txt", g + r); // nefunguje

chmod ("data_file.txt", 766); // Nefunguje

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

Funkcia fileperms () vráti oprávnenie súboru s daným menom alebo v prípade chyby FALSE. Syntax pre funkciu fileperms () je:

int fileperms (názov súboru reťazca)

Chown () sa pokúša zmeniť vlastníka súboru. Iba privilegovaný používateľ má právo zmeniť vlastníka súboru. Syntax funkcie chown () je:

int chown (názov súboru reťazca, zmiešaný používateľ)

Funkcia fileowner () vráti ID používateľa vlastníka súboru s daným menom. Syntax pre funkciu fileowner () je:

int vlastník súboru (názov súboru reťazca)

Kopírovanie a premenovanie súborov

Medzi ďalšie užitočné systémové funkcie, ktoré skripty PHP môžu vykonávať, patrí kopírovanie a premenovanie súborov na serveri. Tieto operácie sa vykonávajú dvoma funkciami: vrh () a premenovanie ().

Kopírovanie súboru v skripte PHP nie je o nič ťažšie ako použitie príkazu UNIX, porovnaj. Úlohu rieši funkcia PHP sopu (). Syntax pre funkciu copu () je:

int copy (zdroj reťazca, cieľ reťazca)

Funkcia copu () sa pokúša skopírovať zdrojový súbor do cieľového; pri úspechu sa vráti TRUE, pri zlyhaní FALSE. Ak cieľový súbor neexistuje, vytvorí ho funkcia vrh (). Nasledujúci príklad ukazuje, ako zálohovať súbor pomocou funkcie copu ():

$ data_file \u003d "datal.txt";

copy ($ data_file. $ data_file ".bak") alebo die ("Nepodarilo sa skopírovať $ data_file");

Funkcia rename () premenuje súbor. Vráti hodnotu TRUE pri úspechu a hodnotu FALSE pri zlyhaní. Syntax funkcie rename () je:

bool rename (reťazec old_name, string new_name)

Príklad premenovania súboru pomocou funkcie rename ():

$ data_file \u003d "datal.txt";

premenovať ($ dátový súbor, $ datafile ".old") alebo zomrieť ("Nemôžem premenovať $ dátový súbor");

Odstraňujú sa súbory

Funkcia unlink () odstráni súbor s daným menom. Syntax:

int unlink (súbor reťazca)

Ak pracujete s PHP v systéme Windows, pri používaní tejto funkcie niekedy nastanú problémy. V takom prípade môžete použiť vyššie uvedenú funkciu system () a súbor vymazať pomocou príkazu DOS del:

system ("del nazov.txt");

Práca s adresármi

Funkcie PHP vám umožňujú prezerať a navigovať v obsahu adresárov. Výpis 7.8 zobrazuje typickú štruktúru adresárov UNIX.

Výpis 7.8. Typická adresárová štruktúra

Funkcia dirname () dopĺňa basename () extrakciou cesty z plne kvalifikovaného názvu súboru. Syntax pre funkciu dirname () je:

reťazec dirname (cesta reťazca)

Príklad použitia nástroja dirname () na extrahovanie cesty z úplného názvu:

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

$ súbor \u003d dirname ($ cesta); // $ file \u003d "usr / local / phppower / htdocs"

Funkcia dirname () sa niekedy používa v spojení s premennou $ SCRIPT_FILENAME na získanie úplnej cesty k skriptu, z ktorého sa príkaz vykonáva:

$ dir - dirname ($ SCRIPT_FILENAME);

Funkcia is_dir () skontroluje, či je súbor s daným názvom adresár:

bool is_dir (názov súboru reťazca)

Nasledujúci príklad používa štruktúru adresárov zo zoznamu 7.8:

$ isdir \u003d is_dir ("index.html"); // Vráti hodnotu FALSE

$ isdir \u003d is_dir ("kniha"); // Vráti hodnotu TRUE

Funkcia mkdir () robí to isté ako rovnomenný príkaz UNIX - vytvorí nový adresár. Syntax funkcie mkdir () je:

int mkdir (cesta reťazca, int režim)

Parameter path definuje cestu pre vytvorenie nového adresára. Nezabudnite ukončiť parameter názvom nového adresára! Parameter mode určuje povolenia pridelené vytvorenému adresáru.

Rovnako ako funkcia fopen () otvára manipulátor na manipuláciu s daným súborom, opendir () otvára manipulátor na manipuláciu s adresárom. Syntax pre funkciu opendir () je:

int opendir (cesta reťazca)

Funkcia closedir () zavrie popisovač adresára odovzdaný ako parameter. Syntax funkcie closedir () je:

void closedir (int dir_manipulator)

Funkcia readdir () vráti ďalšiu položku v zadanom adresári. Syntax:

string readdir (int dir_manipulator)

Pomocou tejto funkcie môžete ľahko zobraziť zoznam všetkých súborov a podadresárov v aktuálnom adresári:

$ dh \u003d opendir (".);

while ($ file \u003d readdir ($ dh)):

vytlačiť "$ súbor
"; nakoniec;

Funkcia chdir () funguje rovnako ako príkaz cd systému UNIX - naviguje do adresára určeného parametrom. Syntax funkcie chdir () je:

int chdir (adresár reťazcov)

V nasledujúcom príklade prejdeme do knihy / podadresára a zobrazíme jej obsah:

$ newdir \u003d "kniha";

chdir ($ newdir) alebo die ("Nepodarilo sa zmeniť na adresár ($ newdir)"); $ dh \u003d opendir (".");

while ($ file \u003d readdir ($ dh));

vytlačiť "$ súbor
";

Funkcia rewlnddir () presunie ukazovateľ aktuálnej polohy na začiatok adresára otvoreného programom opendir (). Syntax pre funkciu rewinddir () je:

void rewinddir (int dir_nip)

Projekt 1: jednoduchý počítadlo zásahov

Skript uvedený v tejto časti počíta počet prístupov na stránku, na ktorej je. Pred prechodom na kód v zozname 7.9 si prezrite algoritmus pseudokódu:

  1. Nastavte premennú $ access na názov súboru, v ktorom bude uložená hodnota počítadla.
  2. Použite filе () na načítanie obsahu $ access do poľa $ visit. Predpona @ pred názvom funkcie potláča možné chyby (napríklad absencia súboru s daným názvom).
  3. Nastavte premennú $ current_visitors na prvý (a jediný) prvok v poli $ visit.
  4. Zvýšte hodnotu $ current_visitors o 1.
  5. Otvorte súbor $ access na zápis a nastavte ukazovateľ aktuálnej polohy na začiatok súboru.
  6. Do súboru $ access napíš hodnotu $ current_visitors.
  7. Zatvorte rukoväť odkazujúcu na $ access.

Výpis 7.9. Jednoduché počítadlo zásahov

// Scenár: jednoduché počítadlo zásahov

// Účel: uloženie počtu prístupov do súboru

$ access \u003d "hits.txt"; // Názov súboru je zvolený ľubovoľne

$ current_visitors \u003d $ návštevy; // Načítanie prvej (a jedinej) položky

++ $ current_visitors; // Zvýšiť počítadlo zásahov

$ fh \u003d fopen ($ prístup. "w"); // Otvorte súbor hits.txt a nainštalujte ho

// ukazovateľ aktuálnej polohy na začiatok súboru

@fwrite ($ fh, $ current_visitors); // Napíš novú hodnotu počítadla

// do súboru „hits.txt“

fclose ($ fh); // Zatvorte popisovač súboru „hits.txt“

Projekt 2: Vytvorenie súboru Sitemap

Skript v zozname 7-10 vytvára mapu webu - hierarchické zobrazenie všetkých priečinkov a súborov na serveri, počnúc daným adresárom. Pri výpočte odsadenia prvkov, ktoré tvoria mapu webu, sa použijú funkcie definované v tejto a predchádzajúcich kapitolách. Pred prechodom na program si prezrite algoritmus napísaný v pseudokode:

  1. Deklarujte premenné služby, ktoré ukladajú nadradený adresár, názov grafického súboru s obrázkom priečinka, názov stránky a príznak OS servera (Windows alebo iný systém).
  2. Deklarujte funkciu display_directory (), ktorá číta obsah adresára a formátuje ho na zobrazenie v prehliadači.
  3. Vytvorte cestu k adresáru zreťazením názvu odovzdaného v premennej $ dir1 s $ dir.
  4. Otvorte adresár a prečítajte si jeho obsah. Naformátujte názvy adresárov a súborov a zobrazte ich v prehliadači.
  5. Ak je aktuálnym súborom adresár, rekurzívne zavolajte display_di rectory () a zadajte názov nového adresára, ktorý sa má zobraziť. Vypočítajte odsadenie použité pri formátovaní výstupu.

Ak súbor nie je adresárom, je naformátovaný tak, aby sa zobrazil ako hypertextový odkaz (a počíta sa aj odsadenie použité na formátovanie).

Výpis 7.10. Program Sitemap.php

// Súbor: sitemap.php

// Účel: Vytvorenie súboru Sitemap

// Adresár, z ktorého sa má začať zostavovať mapa

$ beg_path \u003d "C: \\ Program FilesVApache Group \\ Apache \\ htdocs \\ phprecipes";

// Súbor s grafickým obrázkom priečinka.

// Cesta musí byť relatívna k * koreňovému adresáru servera Apache

$ folder_location \u003d "C: \\ Moje dokumenty \\ PHP pre programátorov \\ FINAL CHPS \\ graphics \\ folder.gif";

// Text v záhlaví $ page_name \u003d "PHPRecipes SiteMap";

// Bude sa skript používať v systéme Linux alebo Windows?

// (0 - Windows; 1 - Linux)

$ usingjinux \u003d 0;

// Funkcia: display_directory

// Účel: načítanie obsahu adresára špecifikovaného parametrom

// $ dir1, nasledované formátovaním hierarchie adresárov a súborov.

// Funkciu je možné zavolať rekurzívne.

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

// Aktualizácia cesty

Sdh \u003d opendir ($ dir);

while ($ file \u003d readdir ($ dh)):

// Položky adresára „.“ a „..“ sa nezobrazia.

if (($ file! \u003d ".") && ($ file! \u003d "..")):

if ($ using_linux \u003d\u003d 0):

$ depth \u003d explodovať ("\\\\", $ dir): else:

$ depth \u003d explodovať ("/", $ dir); koniec Ak; $ curtent_depth \u003d sizeof ($ depth);

// Cestu zostavte podľa pravidiel použitého operačného systému. if ($ using_linux \u003d\u003d 0):

$ tab_depth \u003d $ current_deptn - $ init_depth;

$ file \u003d $ dir. "\\\\", $ súbor; inak:

$ file \u003d $ dir. „/“, súbor $; koniec Ak;

// Obsahuje premenná $ file adresár? if (je dir ($ súbor)):

// Vypočítajte odsadenie

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

$ x ++; nakoniec;

tlačiť "

".basename ($ súbor)."
";

// Zvýšiť počítadlo

// Rekurzívne volanie display_directory ()

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

// Adresár He

// Vytvorte cestu podľa použitých pravidiel

// operačný systém.

if ($ using_linux \u003d\u003d 0):

$ tab_depth \u003d ($ current_depth - $ init_depth) - 2; $ x \u003d 0;

// Vypočítajte odsadenie

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

tlačiť " ".basename ($ súbor)."
";

tlačiť " ".basename ($ súbor)."
";

koniec Ak; // Is_dir (súbor) endif: // Ak! „.“ alebo „..“

// Zatvoriť adresár closedir ($ dh);

<? print "$page_name"; ?>

// Vypočítaj začiatočnú výplň

if ($ using_linux \u003d\u003d 0):

$ depth \u003d explodovať ("\\\\", $ beg_path);

$ depth \u003d explodovať ("/", $ beg_path);

$ init_depth \u003d sizeof ($ depth);

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

Na obr. 7.1 zobrazuje výstup skriptu pre adresár s niekoľkými kapitolami v tejto knihe.

Obrázok: 7.1. Zobrazenie adresárovej štruktúry na serveri pomocou skriptu sitemap.php

Výsledok

Táto kapitola predstavila mnoho nástrojov PHP na prácu so súbormi. Konkrétne sme sa zamerali na tieto problémy:

  • kontrola existencie súborov;
  • otváranie a zatváranie súborov a I / O streamov;
  • zápis do súboru a čítanie zo súboru;
  • presmerovanie súboru do výstupného toku;
  • spustenie externých programov;
  • operácie súborového systému.

Táto kapitola pripravila pôdu pre ďalšiu kapitolu „Struny a regulárne výrazy“, pretože spracovanie reťazcov a I / O sú vo vývoji webu veľmi úzko prepojené.