Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Programmierung mit PHP  Teil von  Dateisystem via PHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++



:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
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"))) {



 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


Microsoft Deutschland GmbH
twosteps.net - ...Premium-Webhosting
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2009 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt