The symfony Cookbook

Wie man eine Datei lokalisiert

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony Cookbook" which is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

Übersicht

Die sfFinder Klasse

Die Grundsätze der Richtlinien

Filter-Regeln

Nach Namen filtern

Nach Dateigröße filtern

Die Suchtiefe begrenzen

Verzeichnisse ausschließen

Ausgangspunkt der Suche

Das zurückgeben der relativen Pfade

symfony training
Be trained by symfony experts
Feb 21: Köln (Getting Started with Symfony2 - English)
Feb 27: Köln (Mastering Symfony2 - English)
Mar 05: Köln (Web Development with Symfony2 - Deutsch)
Mar 05: Montreal (Web Development with Symfony2 - English)
Mar 05: Montreal (Getting Started with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony Cookbook" in German for the 1.1 version - Switch to version: - Switch to language:
Creative Commons License This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Translation of this work into another language is explicitly allowed.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

Übersicht

Einige Skripte in Ihren Anwendungen müssen auf Dateien zurückgreifen, ohne notwendigerweise zu wissen, wo sie sich befinden. Wenn Sie bash verwenden, könnten Sie find benutzen, um sie zu finden. In symfony können Sie dies leicht über sfFinder Klasse erreichen. Eine komplizierte Suche ist eine Angelegenheit von Hinzufügen neuer Suchkriterien und das Resultat ist ein einfaches Array von Dateipfaden.

Die sfFinder Klasse

Die sfFinder Klasse ist eine "Dateisuch"-Klasse das von Perls File::Find::Rule-Modul inspiriert wurde. Es kann entweder Dateien oder Verzeichnisse (oder beides) finden und filtert die Suche durch einen Satz selbstedefinierter Richtlinien. Die grundlegende Verwendung ist die folgende:

  1. Erzeugen Sie ein sfFinder Objekt für Ihre Suche, indem sie die Klassenmethode type() aufrufen. Übergeben Sie als Argument was für Resultate Sie erwarten (entweder file für Dateien, dir für Verzeichnisse oder any für beides)

    $finder = sfFinder::type('file');
  2. Fügen weitere Sie Richtlinien hinzu, um Ihre Suche zu verfeinern und die Zahl der Resultate zu verringern

    $finder = $finder->name('*.php');
  3. Starten Sie die Suche indem Sie in() Methode aufrufen und das Wurzelverzeichnis des für die Suche als Argument übergeben

    $files = $finder->in('/home/production/myproject');

Alle diese Methodenanrufe können an eine einzelne Zeile verkettet werden, die häufig einfacher zu lesen ist:

$files = sfFinder::type('file')->name('*.php')->in('/home/production/myproject');
// kann wie folgt gelesen werden
// finde Dateien im das mit den Namen '*.php' übereinstimmen im '/home/production/myproject' Verzeichnis'

Die in() liefert ein Array mit den Dateien, das für Dateimanipulationen verwendet werden können:

foreach ($files as $file)
{
  $handle = fopen($file, "r");
  ...
}

Die sfFinder Klasse wird automatisch eingebunden, somit ist es notwendig diese in Ihrem Skript manuel ein zu binden.

Die Grundsätze der Richtlinien

Die Richtlinien, die verwendet werden, um die Suche zu verfeinern, werden über die Methodenanrufe des sfFinder Objekts definiert. Alle Methoden geben das gegenwärtige sfFinder Objekt zurück, um das einfache Anketten von Methodenaufrugen zu erlauben.

$finder1 = sfFinder::type('file')->name('*.php');                   // ist ein sfFinder Objekt
$finder2 = sfFinder::type('file')->name('*.php')->size('> 10K');    // ist ebenfalls ein sfFinder Objekt
$files = $finder1->in('/home/production/myproject');                // ist ein Array von Dateipfaden

Alle Methoden, mit Ausnahme von der in() Methode, können mehrmals aufgerugen können.

Einige Richtlinien sind kumulativ (name() zum Beispiel) während andere destruktiv sind (wie maxdepth()). Für destruktive Richtlinien gilt nur der letzte Methodenaufruf:

// dieses filtert für die Dateinamen beide Bedingungen
$finder = sfFinder::type('file')->name('*.php')->name('*Success.*');
// gleichbedeutend
$finder = sfFinder::type('file')->name('*Success.php');
 
// hier, wird nur der letzte Anruf berücksichtigt
$finder = sfFinder::type('file')->maxdepth(5)->maxdepth(3);
// gleichbedeutend
$finder = sfFinder::type('file')->maxdepth(3);

Filter-Regeln

Nach Namen filtern

Um nach Dateinamen zu filtern, verwenden Sie die name() Methode mit Mustern im glob oder Regular Expression Format:

$finder = sfFinder::type('file')->name('*.php');
$finder = sfFinder::type('file')->name('/.*\.php/');

Sie können sogar bestimmte Dateinamen vom Resultat ausschließen, indem Sie die not_name() Methode aufrufen:

$finder = sfFinder::type('file')->not_name('Base*');
$finder = sfFinder::type('file')->name('/^Base.*$/');

Nach Dateigröße filtern

Sie können Ihre Suche auf Dateigröße filtern, indem Sie die size() Methode verwenden, die als Argument einen Vergleich als Zeichenkette erwartet. Die Methode versteht auch konkrete Größenangaben:

// sucht nur nach Dateien die größer als 10 kilobytes sind
$finder = sfFinder::type('file')->size('> 10K');
// sucht nur nach Dateien die kleiner gleich als 1 kilobytes sind
$finder = sfFinder::type('file')->size('<= 1Ki');
// sucht nur nach Dateien die 123 bytes groß sind
$finder = sfFinder::type('file')->size(123);

Die Symbole, die für Größeangaben verwendet werden, sind binary prefix definiert durch das internationale System der Maßeinheiten.

Die Suchtiefe begrenzen

Voreingestellt ist eine Suche, die durch das sfFinder Objekt durchgeführt wird, rekursiv und scannt alle Unterverzeichnisse. Sie können dieses Verhalten aufheben, indem Sie die maxdepth() Methode verwenden, um die maximale Tiefe der Suche in der Dateibaumstruktur einzustellen:

// suche im Verzeichnis und in den Unterverzeichnissen
$finder = sfFinder::type('file');
// suche nur in das Verzeichnis das der Methode `in()` übergeben wurde
// und nicht in irgendeinem Unterverzeichnis
$finder = sfFinder::type('file')->maxdepth(1);

Selbstverständlich können Sie auch eine minimale Tiefe spezifizieren, indem Sie die mindepth() Methode einsetzen.

Voreingestellt ist die minimale Tiefe 0 und die maximale Tiefe ist endlos (oder nah dran).

Verzeichnisse ausschließen

Wenn Sie Verzeichnisse von der Suche ausschließen möchten, können Sie zwei Methoden verwenden:

Diese zwei Methoden werden häufig im Zusammenhang, wenn ein Verzeichnis und dessen Inhalte von einer Suche ausgeschlossen werden sollen, benutzt:

// entfernt die '.svn' Verzeichnisse und dessen Inhalt vom Resultat
$finder = sfFinder::type('any')->prune('.svn')->discard('.svn');

Um die Dateien und die Verzeichnisse auszuschließen, die durch Versionskontrollprogramme hinzugefügt werden, liefert sfFinder eine Abkürzungmethode: ignore_version_control(). Es entfernt und blendet alle Dateien und Verzeichnisse, die wie .svn, CVS, _darcs, .arch-params, .monotone und .bzr lauten, aus.

Ausgangspunkt der Suche

Die Methode in() wird benutzt, um zu spezifizieren, wo sfFinder nach Dateien oder Verzeichnissen suchen muss. Es kann einen Dateipfad oder eine Array von Dateipfaden als Argument übergeben werden:

// suche in einer einzelnen Position
$files = $finder->in('/home/production/myproject');
// suche in mehreren Positionen
$files = $finder->in(array('/home/production/myproject', '/home/production/myotherproject'));

Es kann entweder absoluten oder relativen Pfade annehmen:

// absoluter Pfad
$files = $finder->in('/home/production/myproject');
// relativer Pfad
$files = $finder->in('../projects/myproject');

Das zurückgeben der relativen Pfade

Voreingesstellt sind die Pfade, die von der in()Methode zurückgegeben werden, absolut. Sie können aber auch angeben, ein Array von relativen Pfaden zu erhalten, indem Sie die relative() Methode bevor Sie die in() Methode verwenden, aufrufen:

// die Pfade sind im relativen Verhältnis zu dem Wurzelverzeichnis
$files = $finder->in('/home/production/myproject');
// die Pfade sind im relativen Verhältnis zu dem aktuellen Verzeichnis directory,
// d.h. das Verzeichnis des aktuellen skripts
$files = $finder->relative()->in('/home/production/myproject');

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.