Programmering

Filsystemstyring med PHP

Jeg blogget tidligere om å bruke PHP på kommandolinjen, men jeg dekket ikke over å bruke PHP for å få tilgang til filsystemet i det innlegget av interesse for blogginnleggets størrelse. Jeg bruker dette innlegget til å dekke noen av det grunnleggende om PHP-filsystemadministrasjon.

Mange av oss som skriver og bruker skript gjør det for funksjoner knyttet til filsystemet. Vi skripthandlinger vi ofte utfører i filsystemet. Spesielt finner vi ofte at vi trenger å kopiere filer, gi nytt navn til filer, fjerne filer og åpne og lukke filer. Vi trenger ofte å utføre viss logikk basert på visse egenskaper ved filer og kataloger. Det ville være vanskelig å seriøst vurdere et språk som et skriptspråk uten anstendig filsystemstøtte. Heldigvis har PHP innebygd støtte for filsystemadministrasjon. Denne støtten kan brukes sammen med kommandolinjen PHP.

W3Schools.com er en bevist verdifull ressurs for å lære om webteknologier, og deres dekning av PHP-filsystemfunksjoner er et annet eksempel på det. Siden minner oss om at PHP-filsystemfunksjonene "er en del av PHP-kjernen" og "lar deg få tilgang til og manipulere filsystemet." Enda viktigere, denne siden oppsummerer også konfigurasjonsdetaljer for PHP-filsystemer, PHP-filsystemfunksjoner og PHP-filsystemkonstanter. Å klikke på et funksjonsnavn fører til en side med flere detaljer om den funksjonen, samt et PHP-kodeeksempel som bruker den funksjonen. Fordi jeg bare vil dekke et delsett av disse i dette innlegget, ønsket jeg å sørge for å referere til denne W3Schools-siden tidlig.

Følgende manus, demoPhpFileSystemManagement.php, demonstrerer flere av PHPs funksjoner for å bestemme filinformasjon. Jeg lister opp hele skriptet her og reproduserer deretter deler av skriptet igjen mens jeg diskuterer dem.

demoPhpFileSystemManagement.php

#! / usr / bin / php 

Før jeg går inn i mer detaljert dekning av PHP-filsystemfunksjonene som er brukt i eksemplet ovenfor, har jeg observert Java-bakgrunnen min i den PHP-koden. For eksempel brukte jeg kommentarer i Javadoc-stil for funksjonene i koden. Heldigvis respekterer PHPDocumentor kommentarer i Javadoc-stil når de genererer kodedokumentasjon. Ovennevnte kode viser også forskjellen på navngivningskonvensjoner jeg er vant til i Java (kamelveske) og navngivningskonvensjonen til PHP (alle små bokstaver med ord atskilt med understrekninger) som vist av påkalte PHP-funksjoner.

Den første delen av PHP-skriptet gir en enkel kommandolinjemeny som ber brukeren om å angi valg og filnavn og stier. Denne kodebiten gjør ikke noe selv med PHP-filsystemfunksjonene, men den viser PHP standard input og output og PHP switch-setningen. Den første delen er gjengitt her.

Kommandolinjemeny og inngangsprosessering

gjør {echo "\ nHvilken operasjon av PHP-filsystem vil du kjøre? \ n \ n"; ekko "1. Parse File Path Information \ n"; ekko "2. Skaff deg en absolutt bane \ n"; ekko "3. Få filstørrelse \ n"; ekko "4. Få diskstørrelse og ledig plass \ n"; ekko "5. Få filtider \ n"; ekko "\ nTast 0 for å avslutte \ n"; ekko "\ n \ nDitt valg:"; $ utvalg = trim (fgets (STDIN)); } mens (! (($ utvalg == "0") || ($ utvalg == "1") || ($ utvalg == "2") || ($ utvalg == "3") || ( $ utvalg == "4") || ($ utvalg == "5"))); switch ($ utvalg) {case "1": ekko "Skriv inn en filsti:"; $ filePath = trim (fgets (STDIN)); $ filePathInfo = parseFilePath ($ filePath); ekko $ filePathInfo; gå i stykker; tilfelle "2": ekko "Enter path:"; $ filePath = trim (fgets (STDIN)); $ realPath = convertPathToAbsolute ($ filePath); ekko $ realPath; gå i stykker; tilfelle "3": ekko "Skriv inn sti og navn på fil:"; $ filePath = trim (fgets (STDIN)); $ sizeOfFile = getSizeOfFile ($ filePath); ekko "File". $ filePath. "har størrelsen". $ sizeOfFile. "byte."; gå i stykker; tilfelle "4": ekko "Angi disketikett:"; $ diskLabel = trim (fgets (STDIN)); $ diskSpace = getDiskSizeAndFreeSpace ($ diskLabel); $ percentageFree = $ diskSpace [1] / $ diskSpace [0]; ekko "Disk". $ diskLabel. "har". $ diskSpace [1]. "av". $ diskSpace [0]. "byte ledig (" .round ($ percentageFree * 100). "%)."; gå i stykker; tilfelle "5": ekko "Angi en fil som du ønsker tilgang til / endret / modifisert tid:"; $ filePath = trim (fgets (STDIN)); $ fileTimes = getFileTimes ($ filePath); ekko "File". $ filePath. "ble sist åpnet på". $ fileTimes [0]. ", ble sist endret på". $ fileTimes [1]. ", og ble sist endret på". $ fileTimes [2]; gå i stykker; tilfelle "0": standard: ekko "\ n \ n"; exit(); } 

Resten av PHP-skriptet inneholder funksjoner som bruker og demonstrerer PHP-filsystemstyringsfunksjonene.

PHP gir funksjoner for enkel tilgang til filbanedetaljer som katalogen til filen, hele navnet på selve filen, filtypen og navnet på filen uten filtype. Noen av disse er demonstrert i eksemplet ovenfor i parseFilePath funksjon, som gjengis neste. Funksjonen viser PHPs basenavn, dirname og pathinfo-funksjoner.

PHP gir filstiinformasjon

/ ** * Analyser den angitte filstien. Demonstrerer følgende PHP-funksjoner: * * - basenavn (): Gir basedelen av filstien (filnavn). * - dirname (): Katalognavn del av filstien. * - pathinfo (): Alle komponenter i banen (basenavn, katalognavn, utvidelse). * * @param $ filePath Filbane som skal analyseres. * @return Filstiinformasjon i en enkelt streng. * / funksjon parseFilePath ($ filePath) {echo "Parsing filbane ...", $ filePath, "\ n"; $ fileBaseName = basenavn ($ filePath); $ fileDirectoryName = dirname ($ filePath); $ pathInfo = pathinfo ($ filePath); returner "Filnavn:". $ fileBaseName. "\ nKatalognavn:". $ fileDirectoryName. "\ nFilnavn:". $ pathInfo ['basenavn]]. "\ nKatalognavn:". $ pathInfo [' dirname ']. " \ nFileutvidelse: ". $ pathInfo ['utvidelse']." \ nFilenavn uten utvidelse: ". $ pathInfo ['filnavn']; } 

Resultatet fra å kjøre ovennevnte mot en eksempelfil vises nå.

PHP gir en nyttig realpath-funksjon som gir en absolutt versjon av en gitt bane. For eksempel vil det løse myke lenker og relative kataloger for å returnere den absolutte banen. Dette demonstreres i convertPathToAbsolute funksjon i mitt eksempel (og gjengitt i neste kodeliste).

Demonstrere Absolute Paths via realpath

/ ** * Konverter den oppgitte stien til en absolutt sti. * * @param $ filePath Filsti skal gjøres absolutt. * @return Absolutt versjon av den angitte filbanen. * / function convertPathToAbsolute ($ filePath) {echo "Konvertering av filsti", $ filePath, "til absolutt bane ... \ n"; returner realpath ($ filePath); } 

Den ovennevnte delen av skriptet gir følgende utdata.

PHP gjør det enkelt å bestemme størrelsen på en fil med den passende navnet filstørrelsesfunksjonen. Min getSizeOfFile funksjon viser dette og er oppført på egenhånd i neste kodeliste.

Få filstørrelse i PHP

/ ** * Bestem størrelsen på den medfølgende filen. * * @param? $ filePath Sti og navn på filen hvis størrelse er nødvendig. * @return Filstørrelse angitt med angitt filsti og navn (i byte). * / funksjon getSizeOfFile ($ filePath) {echo "Få filstørrelse", $ filePath, "... \ n"; returner filstørrelse ($ filePath); } 

Koden fører til utgangen som vises i neste bilde.

PHP gjør det også enkelt å få informasjon om diskplass. PHPs disk_total_space og disk_free_space-funksjoner vises i kodelisten nedenfor for min getDiskSizeAndFreeSpace-funksjon.

PHP diskstørrelse og ledig plass

/ ** * Gi diskstørrelse og ledig plass på disken for den medfølgende disken. * * @param $ diskLabel Etikett for disk hvis totale størrelse og ledige plass skal * oppgis. * @return Array av to elementer, hvorav den første er total diskplass (i byte) * og den andre er ledig diskplass (i byte). * / funksjon getDiskSizeAndFreeSpace ($ diskLabel) {retur matrise (disk_total_space ($ diskLabel), disk_free_space ($ diskLabel)); } 

Ovennevnte eksempel viser ikke bare PHPs disk_total_space og disk_free_space-funksjoner, men det demonstrerer også bruk av PHPs array-funksjon for å lage en array og plassere elementer i arrayen i en enkelt setning.

Resultatet av denne delen av skriptet vises neste.

Den siste funksjonen i skriptet mitt er getFileTimes og formålet er å demonstrere tre PHP-metoder for å få tilgang til datoer / tider tilknyttet filer. Spesielt demonstreres funksjonene fileatime, filectime og filemtime.

PHP File Times

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