Dateisystemverwaltung mit PHP

Ich habe zuvor über die Verwendung von PHP in der Befehlszeile gebloggt, aber ich habe die Verwendung von PHP für den Zugriff auf das Dateisystem in diesem Beitrag im Interesse der Größe des Blogposts nicht behandelt. Ich verwende diesen Beitrag, um einige der Grundlagen der Verwaltung von PHP-Dateisystemen zu behandeln.

Viele von uns, die Skripte schreiben und verwenden, tun dies für Funktionen, die sich auf das Dateisystem beziehen. Wir schreiben Aktionen, die wir normalerweise im Dateisystem ausführen. Insbesondere müssen wir häufig Dateien kopieren, umbenennen, Dateien entfernen sowie Dateien öffnen und schließen. Wir müssen oft bestimmte Logik basierend auf bestimmten Eigenschaften von Dateien und Verzeichnissen ausführen. Ohne eine angemessene Unterstützung des Dateisystems wäre es schwierig, eine Sprache ernsthaft als Skriptsprache zu betrachten. Glücklicherweise hat PHP eine integrierte Unterstützung für die Dateisystemverwaltung. Diese Unterstützung kann in Verbindung mit Befehlszeilen-PHP verwendet werden.

W3Schools.com ist eine nachgewiesene wertvolle Ressource zum Erlernen von Webtechnologien, und die Abdeckung der PHP-Dateisystemfunktionen ist ein weiteres Beispiel dafür. Die Seite erinnert uns daran, dass die Funktionen des PHP-Dateisystems "Teil des PHP-Kerns sind" und "Ihnen den Zugriff auf und die Bearbeitung des Dateisystems ermöglichen". Noch wichtiger ist, dass auf dieser Seite auch Details zur Konfiguration des PHP-Dateisystems, Funktionen des PHP-Dateisystems und Konstanten des PHP-Dateisystems zusammengefasst werden. Wenn Sie auf einen Funktionsnamen klicken, wird eine Seite mit weiteren Details zu dieser Funktion sowie einem PHP-Codebeispiel mit dieser Funktion angezeigt. Da ich in diesem Beitrag nur einen Teil davon behandeln werde, wollte ich sicherstellen, dass Sie frühzeitig auf diese W3Schools-Seite verweisen.

Das folgende Skript demoPhpFileSystemManagement.phpdemonstriert einige der PHP-Funktionen zum Ermitteln von Dateiinformationen. Ich liste hier das gesamte Skript auf und reproduziere dann Teile des Skripts erneut, während ich sie diskutiere.

demoPhpFileSystemManagement.php

#!/usr/bin/php  

Bevor ich mich eingehender mit den im obigen Beispiel verwendeten Funktionen des PHP-Dateisystems befasse, habe ich meinen Java-Hintergrund in diesem PHP-Code beobachtet. Zum Beispiel habe ich Kommentare im Javadoc-Stil für die Funktionen im Code verwendet. Glücklicherweise berücksichtigt PHPDocumentor Kommentare im Javadoc-Stil, wenn Codedokumentation generiert wird. Der obige Code zeigt auch den Unterschied zwischen den in Java gewohnten Namenskonventionen (Kamelbuchstaben) und den Namenskonventionen von PHP (alle Kleinbuchstaben mit durch Unterstriche getrennten Wörtern), wie die aufgerufenen PHP-Funktionen zeigen.

Der erste Teil des PHP-Skripts enthält ein einfaches Textbefehlszeilenmenü, in dem der Benutzer aufgefordert wird, Auswahlmöglichkeiten sowie Dateinamen und Pfade einzugeben. Dieser Codeausschnitt macht selbst nichts mit den Funktionen des PHP-Dateisystems, demonstriert jedoch die Eingabe und Ausgabe des PHP-Standards und die Anweisung PHP switch. Dieser erste Teil ist hier wiedergegeben.

Befehlszeilenmenü und Eingabeverarbeitung

do { echo "\nWhich PHP File System Operation Do You Want To Run?\n\n"; echo "1. Parse File Path Information\n"; echo "2. Acquire an Absolute Path\n"; echo "3. Get File Size\n"; echo "4. Get Disk Size and Free Space\n"; echo "5. Get File Times\n"; echo "\nEnter 0 to Exit\n"; echo "\n\nYour Choice: "; $selection = trim(fgets(STDIN)); } while (!( ($selection == "0") || ($selection == "1") || ($selection == "2") || ($selection == "3") || ($selection == "4") || ($selection == "5"))); switch ($selection) { case "1": echo "Enter a file path: "; $filePath = trim(fgets(STDIN)); $filePathInfo = parseFilePath($filePath); echo $filePathInfo; break; case "2": echo "Enter path: "; $filePath = trim(fgets(STDIN)); $realPath = convertPathToAbsolute($filePath); echo $realPath; break; case "3": echo "Enter path and name of file: "; $filePath = trim(fgets(STDIN)); $sizeOfFile = getSizeOfFile($filePath); echo "File ".$filePath." has a size of ".$sizeOfFile." bytes."; break; case "4": echo "Enter disk label: "; $diskLabel = trim(fgets(STDIN)); $diskSpace = getDiskSizeAndFreeSpace($diskLabel); $percentageFree = $diskSpace[1] / $diskSpace[0]; echo "Disk ".$diskLabel." has ".$diskSpace[1]." of ".$diskSpace[0] ." bytes free (".round($percentageFree*100)."%)."; break; case "5": echo "Enter a file who access/changed/modified times are desired: "; $filePath = trim(fgets(STDIN)); $fileTimes = getFileTimes($filePath); echo "File ".$filePath." was last accessed on ".$fileTimes[0] .", was last changed on ".$fileTimes[1] .", and was last modified on ".$fileTimes[2]; break; case "0": default: echo "\n\n"; exit(); } 

Der Rest des PHP-Skripts enthält Funktionen, die die Verwaltungsfunktionen des PHP-Dateisystems verwenden und demonstrieren.

PHP bietet Funktionen für den einfachen Zugriff auf Dateipfaddetails wie das Verzeichnis der Datei, den vollständigen Namen der Datei selbst, die Dateierweiterung und den Namen der Datei ohne Erweiterung. Einige davon werden im obigen Beispiel in der parseFilePathFunktion demonstriert , die als nächstes wiedergegeben wird. Die Funktion zeigt die PHP-Funktionen basename, dirname und pathinfo an.

PHP bietet Dateipfadinformationen

/** * Parse the provided file path. Demonstrates the following PHP functions: * * - basename() : Provides base portion of file path (file name). * - dirname() : Directory name portion of file path. * - pathinfo() : All components of path (basename, directory name, extension). * * @param $filePath File path to be parsed. * @return File path information in a single String. */ function parseFilePath($filePath) { echo "Parsing file path ...", $filePath, "\n"; $fileBaseName = basename($filePath); $fileDirectoryName = dirname($filePath); $pathInfo = pathinfo($filePath); return "File Name: ".$fileBaseName."\nDirectory Name: ".$fileDirectoryName ."\nFileName: ".$pathInfo['basename']."\nDirectory Name: " .$pathInfo['dirname']."\nFile Extension: ".$pathInfo['extension'] ."\nFile name without extension: ".$pathInfo['filename']; } 

Die Ausgabe von oben für eine Beispieldatei wird jetzt angezeigt.

PHP bietet eine nützliche Realpath-Funktion, die eine absolute Version eines bereitgestellten Pfads bereitstellt. Beispielsweise werden Softlinks und relative Verzeichnisse aufgelöst, um den absoluten Pfad zurückzugeben. Dies wird in der convertPathToAbsoluteFunktion in meinem Beispiel demonstriert (und in der nächsten Codeliste wiedergegeben).

Absolute Pfade über Realpath demonstrieren

/** * Convert the provided path to an absolute path. * * @param $filePath File path to be made absolute. * @return Absolute version of provided file path. */ function convertPathToAbsolute($filePath) { echo "Converting file path ", $filePath, " to absolute path...\n"; return realpath($filePath); } 

Der obige Teil des Skripts erzeugt die folgende Ausgabe.

PHP macht es einfach, die Größe einer Datei mit der treffend benannten Dateigrößenfunktion zu bestimmen. Meine getSizeOfFileFunktion demonstriert dies und wird in der nächsten Codeliste einzeln aufgeführt.

Abrufen der Dateigröße in PHP

/** * Determine size of provided file. * * @param? $filePath Path and name of file whose size is needed. * @return Size of file indicated by provided file path and name (in bytes). */ function getSizeOfFile($filePath) { echo "Getting size of file ", $filePath, "...\n"; return filesize($filePath); } 

Der Code führt zu der im nächsten Bild gezeigten Ausgabe.

PHP macht es auch einfach, Speicherplatzinformationen abzurufen. Die PHP-Funktionen disk_total_space und disk_free_space sind in der folgenden Codeliste für meine Funktion getDiskSizeAndFreeSpace aufgeführt.

PHP-Festplattengröße und freier Speicherplatz

/** * Provide disk size and free space on disk for provided disk. * * @param $diskLabel Label of disk whose total size and free space are to be * provided. * @return Array of two elements, first of which is total disk space (in bytes) * and second of which is free disk space (in bytes). */ function getDiskSizeAndFreeSpace($diskLabel) { return array(disk_total_space($diskLabel), disk_free_space($diskLabel)); } 

Das obige Beispiel zeigt nicht nur die Funktionen disk_total_space und disk_free_space von PHP, sondern auch die Verwendung der Array-Funktion von PHP, um ein Array zu erstellen und Elemente innerhalb des Arrays in einer einzigen Anweisung zu platzieren.

Die Ausgabe dieses Teils des Skripts wird als Nächstes angezeigt.

Die letzte Funktion in meinem Skript besteht getFileTimesdarin, drei PHP-Methoden für den Zugriff auf Datums- / Uhrzeitangaben zu demonstrieren, die mit Dateien verknüpft sind. Insbesondere werden die Funktionen fileatime, filectime und filemtime demonstriert.

PHP-Dateizeiten