Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Programmierung mit PHP  Teil von  Dateisystem via PHP
Letztes Update: 04.09.2007 20:49:50

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Nützliche Verzeichnisoperationen




Auch zum Thema Verzeichnisoperationen liefern wir noch ein paar nützliche Codeschnipsel. Das erste gibt nach einem Muster eine Liste von Dateinamen.

Beispiel – Nur Dateinamen, die .jpg enthalten

<?php

@$verzeichnis = dir(".") or die("Fehler!");
echo "Dateien:<br>";

while ($datei = $verzeichnis->read()) {
  if (preg_match('/.jpg/',$datei)) {
    echo "$datei<br>";
  }
}

$verzeichnis->close();

?>

Das Muster lässt sich einfach auf jedes Dateiformat anpassen. Um die gefundenen Bilder auszugeben, bedarf es lediglich einer kleinen Anpassung der echo-Anweisung: echo "<img src=$file><br>";.


Alternative – scandir()

Die Funktion scandir() ermöglicht es Ihnen, sämtliche Dateien und Verzeichnisse eines Pfads aufzulisten. Hierbei sorgt die Funktion dafür, dass die gefundenen Dateien und Verzeichnisse in Form eines Arrays zurückgegeben werden. Der optionale Parameter sorting_order erlaubt es, die Reihenfolge der Elemente im Array zu bestimmen, aufsteigend oder absteigend (1).

Beispiel

<pre>
<?php

$verzeichnis = '.';
$daten1 = scandir($verzeichnis);
$daten2 = scandir($verzeichnis, 1);

print_r($daten1);
print_r($daten2);

?>
</pre>

Ausgabe
Array
(
    [0] => .
    [1] => ..
    [2] => test.php
    [3] => test2.txt
)
Array
(
    [1] => test2.txt
    [2] => test.php
    [3] => ..
    [4] => .
)


Alternative – Glob

Eine Alternative, um den Inhalt eines Verzeichnisses auszugeben und hierbei lediglich festgelegte Dateiformate zuzulassen, stellt die Funktion glob() dar.

Beispiel – Nur Dateinamen, die .jpg enthalten, aus dem Verzeichnis »daten«

<?php

echo "Dateien:<br>";

foreach (glob("daten/*.jpg") as $dateiname) {
  echo "$filename Dateigrösse " . filesize($dateiname) . "<br> \n";
}

?>

Die Funktion glob() stellt eine Reihe von Konstanten zur Verfügung, mit deren Hilfe Sie noch wesentlich effektiver Verzeichnisinhalte auslesen können.


  • GLOB_MARK – Fügt jedem gefundenen Eintrag einen Slash hinzu. Gerade bei Verzeichnissen ist dies wünschenswert, da Dateinamen direkt angehängt werden können.
  • GLOB_NOSORT – Deaktiviert die Sortierung. Die Standardeinstellung ist auf alphabetische Sortierung eingestellt.
  • GLOB_NOCHECK – Falls kein Eintrag gefunden wird, kann man sich hiermit das Suchmuster zurückgeben lassen.
  • GLOB_NOESCAPE – Metazeichen im Suchtreffer werden nicht mit einem Backslash versehen. Unter Windows sollten Sie diese Option setzen.
  • GLOB_BRACE – Setzt einen Platzhalter für mehrere Suchaufzählungen. Der Platzhalter {a,b,c} findet 'a', 'b', oder 'c'.
  • GLOB_ONLYDIR – Bei der Suche werden nur Verzeichnisse berücksichtigt.
  • GLOB_ERR – Stoppt bei einem Lesefehler. Diese Konstante steht erst ab PHP 5.1 zur Verfügung.

Die Konstanten können auch miteinander verbunden werden. Hier ein Syntaxbeispiel:

glob("{[ad]*_?.jpg, [ad]*_?.gif}", GLOB_BRACE|GLOB_ERR)

Folgende Platzhalter stehen zur Verfügung:
  • {Platzhalter,Platzhalter} – Wurde die Konstante GLOB_BRACE gesetzt, so können Sie in geschweiften Klammern mehrere Suchmuster durch ein Komma getrennt angeben. Hierbei handelt es sich dann um eine ODER-Verknüpfung. {*.jpg,*.gif,*.pdf} findet Dateien mit der Endung .jpg, .gif oder .pdf. glob("{*.jpg,*.gif,*pdf}", GLOB_BRACE).
  • ? – Das Fragezeichen steht für genau ein beliebiges Zeichen. glob("bild?1.jpg") findet z. B. die Datei bild_1.jpg.
  • * – Das Sternchen steht für kein oder eine beliebige Anzahl Zeichen. glob("bi*.gif") findet z. B. die Dateien bild.gif, bitmap.gif etc.
  • [] – Die eckigen Klammern finden genau ein Zeichen aus einer in den Klammern definierten Zeichengruppe. Wie auch bei den geschweiften Klammern muss die Konstante GLOB_BRACE gesetzt werden.
  • [acp] – Genau der Buchstabe "a" oder "c" oder "p".
  • [ad] – Genau die Buchstaben "a", "b", "c" und "d".
  • [0-9] – Die Zahlen 0-9.
  • [!Aacp] – Das Ausrufezeichen negiert den Ausdruck. Es darf also nicht "A", "a", "c" oder "p" vorkommen.

Beispiel – Nur Dateinamen, die .jpg oder .png enthalten, aus dem Verzeichnis »daten«

<?php

echo "Dateien:<br>";

foreach (glob("daten/{*.png,*.gif}", GLOB_BRACE) as $filename) {
  echo "$filename Dateigrösse " . filesize($filename) . "<br> \n";
  echo "<img src=$filename><br> \n";
}

?>


Bearbeiten sämtlicher Dateien eines Verzeichnisses

Wollen Sie sämtliche Dateien eines Verzeichnisses und dessen Unterverzeichnisse samt Dateien auflisten und bearbeiten, ist dies mit einer Rekursion möglich. Hierfür habe ich eine nützliche Funktion, die Sie jederzeit einsetzen und auf Ihre Bedürfnisse anpassen können:
<?php

// Sämtliche Dateien in und unterhalb des Verzeichnisses erfassen
function lese_verzeichnisse($v_name,$funk_name,$max_tiefe = 10,$tiefe = 0) {
  if ($tiefe >= $max_tiefe) {
    error_log("Maximale Tiefe $max_tiefe von $v_name.");
    return false;
  }
  $sub_vers = array();
  $files = array();
  if (is_dir($v_name) && is_readable($v_name)) {
    $verzeichnis = dir($v_name);
    while (false !== ($datei = $verzeichnis->read())) {
      // . und .. nicht ausgeben
      if (('.' == $datei) || ('..' == $datei)) {
        continue;
      }
      // Verzeichnisse und symbolische Links
      if (is_dir("$v_name/$datei")) {
        array_push($sub_vers,"$v_name/$datei");
      } else {
        $funk_name("$v_name/$datei");
      }
    }
    $verzeichnis->close();
    // Rekursiver Durchlauf, um die jeweiligen
    // Unterverzeichnisse zu erreichen
    foreach ($sub_vers as $sub_ver) {
      lese_verzeichnisse($sub_ver,$funk_name,$max_tiefe,$tiefe+1);
    }
  }
}

// Funktion zur Formatierung der Ausgabe
function printatime($p_datei) {
  print "<a href=$p_datei>".basename($p_datei)."</a><br>";
}

lese_verzeichnisse('.','printatime');

?>



Die Funktion bearbeitet sämtliche gefundenen Dateien, indem sie der Ausgabe einen Hyperlink hinzufügt, sodass sich die Dateien einzeln ansprechen lassen.


Besonderheit

Da is_dir() true zurückgibt, wenn es auf einen symbolischen Link trifft, der auf ein Verzeichnis verweist, folgt die Funktion auch symbolischen Links. Sollten Sie den symbolischen Links nicht folgen wollen, ändern Sie die Codezeile:

if (is_dir("$v_name/$datei")) {

in:

if (is_dir("$v_name/$datei") && (! is_link("$v_name/$datei"))) {



 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt