Praktisch angewandt
Für die Programmieraufgabe aus der Einführung zu dieser Titelstrecke hält PHP selbstverständlich auch passende Funktionen bereit. Das Einlesen der CSV-Datei lässt sich mit »fgetcsv()«
erledigen, Beispielcode zeigt Listing 5. Zunächst öffnet »fopen()«
die CSV-Datei »liste.csv«
. »fgetcsv()«
holt aus ihr die nächste Zeile, extrahiert die einzelnen Datenfelder und legt diese dann umgehend in das Array »$data«
. Die nachfolgende »foreach()«
-Schleife gibt alle Elemente im Array der Reihe nach aus.
Listing 5
CSV-Datei einlesen
01 <?php
02 $datei = fopen("liste.csv", "r");
03 while (($data = fgetcsv($datei, 0, ",")) !== FALSE) {
04
05 echo "Zeileninhalt:\n";
06 foreach ( $data as $nr => $eintrag ) {
07 $eintrag = trim($eintrag);
08 echo "$eintrag\n";
09 }
10
11 }
12 fclose($datei);
13 exit(0);
14 ?>
Aufgrund der »while()«
-Schleife wiederholt sich diese Prozedur so lange, bis »fgetcvs()«
das Ende der CSV-Datei erreicht hat und somit keine weitere Zeile zurückliefern kann. Viel komfortabler und kürzer geht es kaum. Der dritte Parameter von »fgetcsv()«
gibt das Trennzeichen vor, in Listing 5 trennt ein Komma die Einträge. Tauscht der Admin es gegen einen Doppelpunkt, kann er ebenso einfach die Systemdatei »/etc/passwd«
einlesen:
$datei = fopen("/etc/passwd", "r");
$data = fgetcsv($datei, 0, ":");
Das Gegenstück zu »fgetcsv()«
heißt »fputcsv()«
. Sie legt in CSV-Dateien halb-automatisch eine passende Zeile ab. Dazu übergibt der Programmierer der Funktion lediglich das gewünschte Trennzeichen sowie ein Array, in dem sich alle Daten für eine Zeile befinden:
$datensatz = array("tims", "Tim","Schürmann");
$datei = fopen("test.csv", "w");
fputcsv($datei, $datensatz, ",");
Auf der Kommandozeile erweisen sich vor allem die zahlreichen Posix-Funktionen als nützlich. So liefert etwa »posix_geteuid()«
die Benutzer-ID zurück, unter der das Skript gerade läuft. Die kann man dann wiederum an »posix_geteuid()«
verfüttern, was ein Array mit allen Benutzerinformationen ausspuckt. In Listing 6 ist dafür ein Beispiel zu sehen, die Ausgaben finden sich in Abbildung 2.
Listing 6
Prozesseigenschaften
01 <?php 02 $uid = posix_geteuid(); 03 $benutzer = posix_getpwuid($uid); 04 echo "Benutzer des Prozesses: $benutzer[name] \n"; 05 echo "UID: $benutzer[uid] \n"; 06 echo "GID: $benutzer[gid] \n"; 07 echo "Heimatverzeichnis: $benutzer[dir] \n"; 08 ?>
Die Zugriffsrechte auf eine Datei ermittelt »posix_access()«
. Listing 7 zeigt die Funktion in der Praxis, Abbildung 3 ein paar Beispielausgaben.
Listing 7
Test auf Dateirechte mit posix_access()
01 <?php
02 $existiert = posix_access("/etc/passwd", POSIX_F_OK);
03 if($existiert) echo "Datei existiert\n";
04
05 $lesen = posix_access("/etc/passwd", POSIX_R_OK);
06 if($lesen) echo "Darf Datei lesen\n";
07
08 $schreiben = posix_access("/etc/passwd", POSIX_W_OK);
09 if($schreiben) echo "Darf in Datei schreiben\n";
10
11 $ex = posix_access("/etc/passwd", POSIX_X_OK);
12 if($ex) echo "Darf die Datei ausführen\n";
13 ?>
Mit Dateien hantieren
Für fast jede Dateisystemoperation besitzt PHP eine entsprechende Funktion, teilweise sogar mehrere. So ändert »chmod()«
die Zugriffsrechte einer Datei, »ls_dir()«
prüft, ob der übergebene Dateiname ein Verzeichnis ist, »copy()«
kopiert eine Datei und »mkdir()«
legt ein neues Verzeichnis an:
mkdir("/home/tim/neu", 0700);
Das zweite Argument gibt die Zugriffsrechte an, in diesem Beispiel darf nur auf das Verzeichnis zugreifen, wer das Skript gestartet hat. Mit »scandir()«
ist es zudem ein Leichtes, alle Dateien in einem Verzeichnis zu verarbeiten. Listing 8 gibt mit dieser Funktion alle Dateien des Unterverzeichnisses »Bilder«
aus. Abbildung 4 zeigt die Funktion »getcwd()«
.
Listing 8
scandir() im Einsatz
01 <?php
02 $dateien = scandir('Bilder');
03 foreach ($dateien as $datei) {
04 echo "$datei \n";
05 };
06 ?>
Externe Programme startet die Exec-Funktion beispielsweise in der Form »exec("gzip test.txt")«
. Praktischerweise kann der Admin im CLI fast alle PHP-Erweiterungen nutzen. So greift er etwa auf das erstellte Gzip-Archiv mit den entsprechenden Zlib-Funktionen zu. Beispielsweise schickt er dessen Inhalt auf die Konsole:
readgzfile("test.txt.gz"); Analog existieren noch weitere Funktionen, um etwa Zip- und Rar-Archive zu öffnen und zu manipulieren.
Mit den Kryptofunktionen generiert der Anwender schnell den eindeutigen Fingerabdruck einer Datei, im folgenden Beispiel mit dem MD5-Hashverfahren:
echo hash_file("md5", "test.txt"); Diese Funktionen sind nur ein kleiner Ausschnitt aus dem riesigen Angebot, das selbst exotische Wünsche befriedigen dürfte [2]. Es gibt sogar die Möglichkeit, über Ncurses-Funktionen eine kleine Benutzeroberfläche zu basteln.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 4 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





