Programování

Správa systému souborů s PHP

Dříve jsem blogoval o používání PHP na příkazovém řádku, ale nepokryl jsem používání PHP pro přístup k systému souborů v tomto příspěvku v zájmu velikosti příspěvku na blogu. Tento příspěvek používám k pokrytí některých základů správy souborového systému PHP.

Mnoho z nás, kteří píšeme a používáme skripty, to děláme pro funkce související se souborovým systémem. Skriptujeme akce, které běžně provádíme v systému souborů. Konkrétně často potřebujeme kopírovat soubory, přejmenovávat je, odebírat soubory a otevírat a zavírat soubory. Často musíme provádět určitou logiku založenou na určitých charakteristikách souborů a adresářů. Bylo by těžké vážně považovat jazyk za skriptovací jazyk bez slušné podpory souborového systému. Naštěstí má PHP integrovanou podporu pro správu souborového systému. Tuto podporu lze použít ve spojení s příkazovým řádkem PHP.

W3Schools.com je osvědčeným cenným zdrojem pro učení o webových technologiích a jejich pokrytí funkcemi souborového systému PHP je dalším příkladem toho. Stránka nám připomíná, že funkce souborového systému PHP „jsou součástí jádra PHP“ a „umožňují vám přistupovat k souborovému systému a manipulovat s ním.“ Ještě důležitější je, že tato stránka také shrnuje podrobnosti o konfiguraci systému souborů PHP, funkce systému souborů PHP a konstanty systému souborů PHP. Kliknutím na název funkce přejdete na stránku s více podrobnostmi o této funkci a příkladem kódu PHP, který tuto funkci použije. Protože se v tomto příspěvku budu zabývat pouze jejich podmnožinou, chtěl jsem se ujistit, že na tuto stránku W3Schools budu brzy odkazovat.

Následující skript, demoPhpFileSystemManagement.php, ukazuje několik funkcí PHP pro určování informací o souboru. Zde uvedu celý skript a poté, co o nich diskutuji, znovu reprodukuji jeho části.

demoPhpFileSystemManagement.php

#! / usr / bin / php 

Než jsem se podrobněji zabýval funkcemi souborového systému PHP použitými ve výše uvedeném příkladu, pozoroval jsem své pozadí Java v tomto kódu PHP. Například jsem použil komentáře ve stylu Javadoc pro funkce v kódu. Naštěstí PHPDocumentor při generování dokumentace kódu respektuje komentáře ve stylu Javadoc. Výše uvedený kód také demonstruje rozdíl v konvenci pojmenování, na které jsem zvyklý v Javě (případ velblouda), a konvenci pojmenování v PHP (všechna malá písmena se slovy oddělenými podtržítky), jak ukazují vyvolané funkce PHP.

První část skriptu PHP poskytuje jednoduché textové menu příkazového řádku, které uživatele vyzve k zadání možností a názvů souborů a cest. Tento úryvek kódu sám s funkcemi systému souborů PHP nic nedělá, ale ukazuje standardní vstup a výstup PHP a příkaz PHP switch. Tato první část je zde reprodukována.

Nabídka příkazového řádku a zpracování vstupu

do {echo "\ nKterý provoz systému souborů PHP chcete spustit? \ n \ n"; echo "1. Analyzovat informace o cestě k souboru \ n"; echo "2. Získejte absolutní cestu \ n"; echo "3. Získat velikost souboru \ n"; echo "4. Získejte velikost disku a volné místo \ n"; echo "5. Získejte časy souborů \ n"; echo "\ nVstupte 0 k ukončení \ n"; echo "\ n \ nVaše volba:"; $ selection = trim (fgets (STDIN)); } while (! (($ selection == "0") || ($ selection == "1") || ($ selection == "2") || ($ selection == "3") || ( $ selection == "4") || ($ selection == "5"))); switch ($ selection) {case "1": echo "Zadejte cestu k souboru:"; $ filePath = trim (fgets (STDIN)); $ filePathInfo = parseFilePath ($ filePath); echo $ filePathInfo; přestávka; případ "2": echo "Zadejte cestu:"; $ filePath = trim (fgets (STDIN)); $ realPath = convertPathToAbsolute ($ filePath); echo $ realPath; přestávka; případ "3": echo "Zadejte cestu a název souboru:"; $ filePath = trim (fgets (STDIN)); $ sizeOfFile = getSizeOfFile ($ filePath); echo "Soubor". $ filePath. "má velikost". $ sizeOfFile. "bajtů."; přestávka; případ "4": echo "Zadejte označení disku:"; $ diskLabel = trim (fgets (STDIN)); $ diskSpace = getDiskSizeAndFreeSpace ($ diskLabel); $ percentuální zdarma = $ diskSpace [1] / $ diskSpace [0]; echo "Disk". $ diskLabel. "má". $ diskSpace [1]. "z". $ diskSpace [0]. "bajtů zdarma (" .round ($ percentuální zdarma * 100). "%)."; přestávka; case "5": echo "Zadejte soubor, u kterého je požadován přístup / změna / změna času:"; $ filePath = trim (fgets (STDIN)); $ fileTimes = getFileTimes ($ filePath); echo "Soubor". $ filePath. "byl naposledy přístupný v". $ fileTimes [0]. ", naposledy změněn dne". $ fileTimes [1]. "a naposledy změněn dne". $ fileTimes [2]; přestávka; případ "0": výchozí: echo "\ n \ n"; výstup(); } 

Zbývající část skriptu PHP obsahuje funkce, které používají a demonstrují funkce správy systému souborů PHP.

PHP poskytuje funkce pro snadný přístup k podrobnostem cesty k souboru, jako je adresář souboru, celé jméno samotného souboru, přípona souboru a název souboru bez přípony. Některé z nich jsou uvedeny ve výše uvedeném příkladu v dokumentu parseFilePath funkce, která je reprodukována dále. Tato funkce zobrazuje funkce PHP basename, dirname a pathinfo.

PHP poskytuje informace o cestě k souboru

/ ** * Analyzuje poskytnutou cestu k souboru. Ukazuje následující funkce PHP: * * - basename (): Poskytuje základní část cesty k souboru (název souboru). * - dirname (): Část názvu adresáře v cestě k souboru. * - pathinfo (): Všechny komponenty cesty (název, název adresáře, přípona). * * @param $ filePath Cesta k souboru, která má být analyzována. * @return Informace o cestě k souboru v jednom řetězci. * / function parseFilePath ($ filePath) {echo "Analýza cesty k souboru ...", $ filePath, "\ n"; $ fileBaseName = basename ($ filePath); $ fileDirectoryName = dirname ($ filePath); $ pathInfo = pathinfo ($ filePath); vrátit "Název souboru:". $ fileBaseName. "\ nDirectoryName:". $ fileDirectoryName. "\ nFileName:". $ pathInfo ['basename']. "\ nDirectory Name:". $ pathInfo ['dirname']. " \ n Přípona souboru: ". $ pathInfo ['přípona']." \ n Název souboru bez přípony: ". $ pathInfo ['název souboru']; } 

Nyní se zobrazí výstup ze spuštění výše uvedeného proti ukázkovému souboru.

PHP poskytuje užitečnou funkci realpath, která poskytuje absolutní verzi poskytované cesty. Například vyřeší měkké odkazy a relativní adresáře, které vrátí absolutní cestu. To je ukázáno v convertPathToAbsolute funkce v mém příkladu (a reprodukována v následujícím seznamu kódů).

Demonstrace absolutních cest přes realpath

/ ** * Převede zadanou cestu na absolutní cestu. * * @param $ filePath Cesta k souboru bude absolutní. * @return Absolutní verze poskytované cesty k souboru. * / function convertPathToAbsolute ($ filePath) {echo "Konverze cesty k souboru", $ filePath, "na absolutní cestu ... \ n"; návrat realpath ($ filePath); } 

Výše uvedená část skriptu vytváří následující výstup.

Díky PHP je snadné určit velikost souboru pomocí vhodně pojmenované funkce velikost souboru. Můj getSizeOfFile funkce to ukazuje a je uvedena samostatně v dalším seznamu kódů.

Získání velikosti souboru v PHP

/ ** * Určete velikost poskytovaného souboru. * * @param? $ filePath Cesta a název souboru, jehož velikost je potřebná. * @return Velikost souboru označená zadanou cestou a názvem souboru (v bajtech). * / funkce getSizeOfFile ($ filePath) {echo "Získávám velikost souboru", $ filePath, "... \ n"; vrátit velikost souboru ($ filePath); } 

Kód vede k výstupu zobrazenému na dalším obrázku.

PHP také usnadňuje získávání informací o diskovém prostoru. Funkce disk_total_space a disk_free_space v PHP jsou ukázány v seznamu kódů níže pro moji funkci getDiskSizeAndFreeSpace.

Velikost disku PHP a volné místo

/ ** * Poskytněte velikost disku a volné místo na disku pro poskytnutý disk. * * @param $ diskLabel Štítek disku, jehož celkovou velikost a volné místo je třeba poskytnout *. * @return Pole dvou prvků, z nichž první je celkové místo na disku (v bajtech) * a druhý je volné místo na disku (v bajtech). * / funkce getDiskSizeAndFreeSpace ($ diskLabel) {návratové pole (disk_total_space ($ diskLabel), disk_free_space ($ diskLabel)); } 

Výše uvedený příklad nejen demonstruje funkce disk_total_space a disk_free_space v PHP, ale také demonstruje použití funkce pole PHP k vytvoření pole a umístění prvků do pole v jediném příkazu.

Výstup této části skriptu je zobrazen dále.

Konečná funkce v mém skriptu je getFileTimes a jeho účelem je demonstrovat tři metody PHP pro přístup k datům / časům spojeným se soubory. Konkrétně jsou ukázány funkce fileatime, filectime a filemtime.

Časy souborů PHP

$config[zx-auto] not found$config[zx-overlay] not found