Programmering

Filsystemstyring med PHP

Jeg bloggede tidligere om at bruge PHP på kommandolinjen, men jeg dækkede ikke brugen af ​​PHP til at få adgang til filsystemet i det indlæg af interesse for blogindlægets størrelse. Jeg bruger dette indlæg til at dække nogle af det grundlæggende i PHP-filsystemstyring.

Mange af os, der skriver og bruger scripts, gør det til funktioner relateret til filsystemet. Vi scripthandlinger, vi ofte udfører i filsystemet. Specifikt finder vi os ofte brug for at kopiere filer, omdøbe filer, fjerne filer og åbne og lukke filer. Vi har ofte brug for at udføre bestemte logik baseret på visse karakteristika ved filer og kataloger. Det ville være svært at seriøst overveje et sprog som et scriptingsprog uden anstændig filsystemsupport. Heldigvis har PHP indbygget support til filsystemstyring. Denne support kan bruges sammen med kommandolinjen PHP.

W3Schools.com er en bevist værdifuld ressource til at lære om webteknologier, og deres dækning af PHP-filsystemfunktioner er et andet eksempel på det. Siden minder os om, at PHP-filsystemfunktionerne "er en del af PHP-kernen" og "giver dig mulighed for at få adgang til og manipulere filsystemet." Mere vigtigt er, at denne side også opsummerer detaljer om konfiguration af PHP-filsystemer, PHP-filsystemfunktioner og PHP-filsystemkonstanter. Klik på et funktionsnavn fører til en side med flere detaljer om denne funktion samt et eksempel på en PHP-kode ved hjælp af denne funktion. Fordi jeg kun dækker et undersæt af disse i dette indlæg, ville jeg sørge for at henvise til denne W3Schools-side tidligt.

Følgende script, demoPhpFileSystemManagement.php, demonstrerer flere af PHP's funktioner til bestemmelse af filinformation. Jeg viser hele scriptet her og reproducerer derefter dele af scriptet igen, når jeg diskuterer dem.

demoPhpFileSystemManagement.php

#! / usr / bin / php 

Før jeg går ind i mere detaljeret dækning af de PHP-filsystemfunktioner, der er brugt i ovenstående eksempel, har jeg observeret min Java-baggrund i den PHP-kode. For eksempel brugte jeg Javadoc-stil kommentarer til funktionerne i koden. Heldigvis respekterer PHPDocumentor kommentarer i Javadoc-stil, når de genererer kodedokumentation. Ovenstående kode demonstrerer også forskellen på navngivningskonventioner, jeg er vant til i Java (kamelskift) og navngivningskonventioner for PHP (alle små bogstaver med ord adskilt med understregning) som vist med de påkrævede PHP-funktioner.

Den første del af PHP-scriptet giver en simpel tekstkommandolinjemenu, der beder brugeren om at indtaste valg og filnavne og stier. Dette kodestykke gør ikke noget selv med PHP-filsystemets funktioner, men det viser PHP-standardinput og -output og PHP-switch-sætningen. Den første del gengives her.

Kommandolinjemenu og inputbehandling

gør {echo "\ nHvilken PHP-filsystemhandling vil du køre? \ n \ n"; ekko "1. Parse File Path Information \ n"; ekko "2. Erhverv en absolut sti \ n"; ekko "3. Hent filstørrelse \ n"; ekko "4. Få diskstørrelse og ledig plads \ n"; ekko "5. Hent filtider \ n"; ekko "\ nIndtast 0 for at afslutte \ n"; ekko "\ n \ nDit valg:"; $ markering = trim (fgets (STDIN)); } mens (! (($ valg == "0") || ($ valg == "1") || ($ valg == "2") || ($ valg == "3") || ( $ selektion == "4") || ($ valg == "5"))); switch ($ valg) {case "1": echo "Indtast en filsti:"; $ filePath = trim (fgets (STDIN)); $ filePathInfo = parseFilePath ($ filePath); ekko $ filePathInfo; pause; tilfælde "2": ekko "Indtast sti:"; $ filePath = trim (fgets (STDIN)); $ realPath = convertPathToAbsolute ($ filePath); ekko $ realPath; pause; tilfælde "3": ekko "Indtast sti og filnavn:"; $ filePath = trim (fgets (STDIN)); $ sizeOfFile = getSizeOfFile ($ filePath); ekko "File". $ filePath. "har en størrelse på". $ sizeOfFile. "bytes."; pause; tilfælde "4": ekko "Indtast disketiket:"; $ diskLabel = trim (fgets (STDIN)); $ diskSpace = getDiskSizeAndFreeSpace ($ diskLabel); $ percentageFree = $ diskSpace [1] / $ diskSpace [0]; ekko "Disk". $ diskLabel. "har". $ diskSpace [1]. "af". $ diskSpace [0]. "byte gratis (" .round ($ percentageFree * 100). "%)."; pause; tilfælde "5": ekko "Indtast en fil, der ønsker adgang / ændrede / ændrede tidspunkter:"; $ filePath = trim (fgets (STDIN)); $ fileTimes = getFileTimes ($ filePath); ekko "File". $ filePath. "blev sidst åbnet på". $ fileTimes [0]. ", blev sidst ændret på". $ fileTimes [1]. ", og blev sidst ændret på". $ fileTimes [2]; pause; sag "0": standard: ekko "\ n \ n"; Afslut(); } 

Resten af ​​PHP-scriptet indeholder funktioner, der bruger og demonstrerer PHP-filsystemstyringsfunktionerne.

PHP giver funktioner til nem adgang til filsti detaljer såsom filens bibliotek, det fulde navn på selve filen, filens udvidelse og navnet på filen uden udvidelse. Nogle af disse er demonstreret i ovenstående eksempel i parseFilePath funktion, som gengives derefter. Funktionen viser PHPs basenavn, dirname og pathinfo-funktioner.

PHP giver filstiinformation

/ ** * Parse den angivne filsti. Demonstrerer følgende PHP-funktioner: * * - basenavn (): Giver basisdel af filstien (filnavn). * - dirname (): Katalognavne del af filsti. * - pathinfo (): Alle komponenter i stien (basenavn, katalognavn, udvidelse). * * @param $ filePath Filsti, der skal analyseres. * @return Filstiinformation i en enkelt streng. * / funktion parseFilePath ($ filePath) {echo "Parsing filsti ...", $ filePath, "\ n"; $ fileBaseName = basenavn ($ filePath); $ fileDirectoryName = dirname ($ filePath); $ pathInfo = pathinfo ($ filePath); returner "Filnavn:". $ fileBaseName. "\ nKatalognavn:". $ filkatalognavn. "\ nFilnavn:". $ pathInfo ['basenavn']. "\ nKatalognavn:". $ pathInfo ['dirname']. " \ nFiludvidelse: ". $ pathInfo ['udvidelse']." \ nFilnavn uden udvidelse: ". $ pathInfo ['filnavn']; } 

Outputtet fra at køre ovenstående mod en eksempelfil vises nu.

PHP giver en nyttig realpath-funktion, der giver en absolut version af en angivet sti. For eksempel løser det bløde links og relative mapper for at returnere den absolutte sti. Dette demonstreres i convertPathToAbsolute funktion i mit eksempel (og gengivet i den næste kodeliste).

Demonstration af absolutte stier via realpath

/ ** * Konverter den angivne sti til en absolut sti. * * @param $ filePath Filsti skal gøres absolut. * @return Absolut version af den medfølgende filsti. * / funktion convertPathToAbsolute ($ filePath) {echo "Konvertering af filsti", $ filePath, "til absolut sti ... \ n"; returner realpath ($ filePath); } 

Ovenstående del af scriptet producerer følgende output.

PHP gør det let at bestemme størrelsen på en fil med den passende navngivne filstørrelsesfunktion. Min getSizeOfFile funktion demonstrerer dette og er opført alene i den næste kodeliste.

Få filstørrelse i PHP

/ ** * Bestem størrelsen på den leverede fil. * * @param? $ filePath Sti og navn på fil, hvis størrelse er nødvendig. * @return Filstørrelse angivet med angivet filsti og navn (i byte). * / funktion getSizeOfFile ($ filePath) {echo "Henter filstørrelse", $ filePath, "... \ n"; returner filstørrelse ($ filePath); } 

Koden fører til output vist i det næste billede.

PHP gør det også nemt at få diskpladsoplysninger. PHP's disk_total_space og disk_free_space-funktioner vises i kodelisten nedenfor for min getDiskSizeAndFreeSpace-funktion.

PHP Diskstørrelse og ledig plads

/ ** * Giv diskstørrelse og ledig plads på disken til den medfølgende disk. * * @param $ diskLabel Etiket for disk, hvis samlede størrelse og ledige plads skal * tilvejebringes. * @return Array af to elementer, hvoraf det første er samlet diskplads (i byte) * og det andet er ledig diskplads (i bytes). * / funktion getDiskSizeAndFreeSpace ($ diskLabel) {return array (disk_total_space ($ diskLabel), disk_free_space ($ diskLabel)); } 

Ovenstående eksempel demonstrerer ikke kun PHP's disk_total_space og disk_free_space-funktioner, men det demonstrerer også ved hjælp af PHP's array-funktion til at oprette et array og placere elementer i arrayet i en enkelt sætning.

Outputtet fra denne del af scriptet vises derefter.

Den sidste funktion i mit script er getFileTimes og dens formål er at demonstrere tre PHP-metoder til at få adgang til datoer / tidspunkter, der er knyttet til filer. Specifikt demonstreres funktionerne fileatime, filectime og filemtime.

PHP-filtider