Teil von  SELFPHP
  +++ 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.   

 
 
Spezielle Filtermechanismen für Dateien und Verzeichnisse


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 4 >= 4.3.0
  • PHP 5

Datei(en)

glob.php, glob1.php, glob2.php

Problem

Gerade wenn es darum geht, bestimmte Dateien eines Ordners oder Verzeichnisse selbst aufzulisten, sieht man immer wieder die Schwierigkeiten. Die Auflistung funktioniert zwar meistens, aber wenn auch Filterungen mit einbezogen werden sollen, so scheitert es oftmals.

Es gibt für diesen Fall viele Anwendungsmöglichkeiten wie z. B. :

  • Nur JPG-Dateien eines Verzeichnisses auflisten
  • Nur Dateien auflisten, die z. B. mit bestimmten Buchstaben anfangen
  • Alle Dateien auflisten, die das Wort Urlaub im Namen haben
  • Verzeichnisse auflisten, die den Suchkriterien entsprechen

Wie Sie sehen, muss man sich nur ein wenig Gedanken machen und es bieten sich sehr viele Anwendungsmöglichkeiten, die mit dieser Filtermethode realisiert werden können. Daher sollten wir uns mit diesem Thema auch näher beschäftigen.

Lösung

Die Lösung für dieses Problem können wir mit einer bereits implementierten Funktion von PHP realisieren. Bei der Funktion handelt es sich um glob(), die wir für unsere nachfolgenden Beispiele heranziehen werden. Wir werden uns zuerst die möglichen Schalter und Platzhalter anschauen, um diese dann für gewisse Aufgaben gezielt einzusetzen.

Unterstützte Schalter

  • GLOB_MARK – fügt jedem gefundenen Eintrag einen Slash hinzu. Gerade bei Verzeichnissen ist dieses 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 (vor PHP 4.3.3 nicht auf Windows verfügbar).
  • GLOB_ERR – stoppt bei einem Lesefehler (ab PHP 5.1).

Die Schalter können auch miteinander verbunden werden.

  glob("[so]*_?.png",GLOB_BRACE|GLOB_ERR)

Folgende Platzhalter stehen zur Verfügung

  • {Platzhalter,Platzhalter} Wurde der Schalter GLOB_BRACE gesetzt, so können Sie in geschweiften Klammern mehrere Suchbegriffe, getrennt mit einem Komma, angeben. Dabei handelt es sich dann um eine ODERVerknüpfung. {*.pdf,*.gif} findet Dateien mit der Endung .pdf oder .gif Beispiel: glob("{*.png,*.txt}",GLOB_BRACE)
  • ? Das Fragezeichen steht für genau ein beliebiges Zeichen. glob("sonne?1.png") findet z. B. die Datei sonne_1.png
  • * Das Sternchen steht für kein oder eine beliebige Anzahl an Zeichen. glob("so*1.png") findet z. B. die Datei sonne_1.png
  • [] Die eckigen Klammern finden genau ein Zeichen aus einer in den Klammern definierten Zeichengruppe. Wie auch bei den geschweiften Klammern muss der Schalter GLOB_BRACE gesetzt werden.

    [amgz] Genau der Buchstabe „a“ oder „m“ oder „g“ oder „z“.
    [ag] Genau die Buchstaben „a“, „b“, „c“, „d“, „e“, „f“ und „g“.
    [0-9] Die Zahlen 0-9.
    [!aAmgz] Das Ausrufezeichen negiert den Ausdruck. Es darf also nicht „a“, „A“, „m“, „g“ oder „z“ vorkommen.

Für die nachfolgenden Beispiele wurde folgende Verzeichnisstruktur genommen (siehe Abbildung 6.2):



Abbildung 6.2: Verzeichnisstruktur

function listPicture($dir=".",$type="jpg")
   @param   string   $dir
   @param   string   $type
   @return   array    $picture

Die Funktion listPicture() erwartet als Parameter zum einen das Verzeichnis ($dir) für die Suche, zum anderen die Dateiendung ($type). Da wir bei dem Ergebnis mit mehreren Treffern rechnen, speichern wir nachher die Treffer in einem Array. Wir setzen zuerst den Startwert (13) für die Indizierung unseres Arrays.

Im nächsten Schritt durchlaufen wir das vollständige übergebene Verzeichnis und suchen (15) dabei bei jeder Datei nach der geforderten Dateiendung. Sollte die Funktion glob() in dem Verzeichnis eine Datei mit der gesuchten Endung finden, speichern wir den Dateinamen (16), die Dateigröße (17) sowie das Datum (18) der letzten Dateiänderung in unser Array. Diesen Vorgang wiederholen wir so oft, bis alle Dateien gefunden sind. Im Anschluss daran geben wir unser Array (22) der aufrufenden Stelle wieder zurück.

12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
function listPicture($dir=".",$type="jpg") {
    
$x 0;
    
//foreach (glob($dir."*.".$type) as $filename)    sonne_0.png
    
foreach (glob("[so]*_?.png",GLOB_BRACE|GLOB_ERR) as $filename) {
        
$picture[$x]['file'] = $filename;
        
$picture[$x]['size'] = filesize($filename) / 1024;
        
$picture[$x]['time'] = filemtime($filename);
        
$x++;
    } 
    
    return 
$picture;
}
Beispiel 6.4: glob.php

Der Aufruf der eben gezeigten Funktion ist in wenigen Schritten erklärt. Sie müssen lediglich das zu durchsuchende Verzeichnis und die Dateiendung, nach der Sie suchen wollen, übergeben. Wir haben hier in unserem Beispiel das Ergebnis nur einfach ausgegeben, Sie können aber eine FOR-Schleife durchlaufen und die Ergebnisse gezielter auflisten.

25:
26:
27:
$pic listPicture("bilder/","gif");

print_r($pic);
Beispiel 6.5: glob.php

Ausgabe im Browser

Array
(
   [0] => Array
      (
         [file] => bilder/che.gif
         [size] => 1.40234375
         [time] => 1145368015
      )
   [1] => Array
      (
         [file] => bilder/logo.gif
         [size] => 37.4423828125
         [time] => 1145368017
      )
   [2] => Array
      (
         [file] => bilder/u_blau.gif
         [size] => 1.017578125
         [time] => 1145368018
      )
)

Ein weiteres Beispiel könnte z. B. folgendes Szenario sein: Sie möchten alle Dateien auflisten, die als Dateiendung .jpg in ihrem Namen haben. Zusätzlich muss die Datei entweder mit „b“ oder „f“ beginnen und kann danach beliebige Zahlen, Buchstaben oder Sonderzeichen im Dateinamen enthalten.

1:
2:
3:
4:
5:
6:
7:
8:
<?PHP

foreach (glob("[bf]*.jpg") as $filename)
{
        echo 
$filename '<br>';


?>
Beispiel 6.6: glob1.php

Ausgabe im Browser

bs9tyo_1137603275.jpg
fihedp_1137603349.jpg

Sie können mit glob() natürlich nicht nur nach Dateien suchen, sondern auch nach Verzeichnissen. In unserem Beispiel sollen alle Verzeichnisse aufgelistet werden, die entweder mit einem „c“ oder „g“ beginnen. Für diese spezielle Suche benutzen wir den Schalter „GLOB_ONLYDIR“.

Da wir im weiteren Verlauf hinter unseren Suchtreffern noch Dateinamen speichern wollen, soll die Funktion glob() bei jedem Suchtreffer direkt einen Schrägstrich hinter dem Verzeichnis platzieren. Auch hierfür gibt es einen Schalter, den wir nutzen können. Wir übergeben der Funktion dabei den Schalter „GLOB_MARK“.

1:
2:
3:
4:
5:
6:
7:
8:
<?PHP

foreach (glob("[cg]*",GLOB_ONLYDIR|GLOB_MARK) as $filename)
{
        echo 
$filename '<br>';


?>
Beispiel 6.7: glob2.php

Ausgabe im Browser

gif/

Wie Sie sehen konnten, wurde hier auf einfache Art und Weise ein komplettes Verzeichnis nach bestimmten Mustern durchsucht. Sie sollten einfach mit dieser Funktion ein wenig „spielen“, um ihre Wirkungsweise zu erlernen. Anhand der bereits erklärten Schalter und Platzhalter können Sie gezielt nach den Verzeichnissen und Dateien suchen, die Sie für Ihre weitere Bearbeitung nutzen wollen.



 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
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 ::


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

Qozido


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