Teil von  SELFPHP
Professional CronJob-Service

Suche

International PHP Conference


WebTech Conference


:: Anbieterverzeichnis ::

Globale Branchen

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

 

:: SELFPHP Forum ::

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

 
PHP Summit


Software Architecture Summit


:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
HTML5 Days


JavaScript Days


:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Suchen in Dateien

Am Ende der Seite finden Sie das komplette Beispiel als Download.

Systemvoraussetzung

  • Linux
  • PHP 3
  • PHP 4
  • PHP 5

Datei(en)

searchShellFile.php

Problem


Sie möchten in Verzeichnissen bzw. in Dateien nach bestimmten Wörtern oder Wortgruppen suchen? Diese Problemstellung gehört wohl zu einer der schwersten Aufgaben in der Programmierung.

Es fängt alleine damit an, das Verzeichnis rekursiv zu durchlaufen, die Dateien zu öffnen, nach den Suchwörtern zu suchen und letztendlich die Ausgabe zu formatieren. Leider ist es aber manchmal doch nötig, solche Operationen durchzuführen.

Wir werden Ihnen hier eine Lösung auf Shell-Basis zeigen, mit der Sie ohne Probleme eine Volltextsuche auf Ihrer Webseite programmieren.


Lösung

Bei der hier gezeigten Lösung greifen wir auf „grep“ zu, ein sehr mächtiges Tool für Suchoperationen. Wir werden Ihnen hier einige Optionen und reguläre Ausdrücke auflisten, sodass Sie später selbst die Suchmechanismen anpassen können. Der Shell-Befehl ist dabei folgendermaßen aufgebaut:

grep [OPTION]. . . PATTERN [FILE] . . .

Anhand eines Beispiels sehen Sie, wie der Befehl mit Optionen und einer rekursiven Verzeichnissuche aufgebaut sein könnte.

grep -cH --directories=recurse 'Suchwörter' verzeichnis/

Wichtige Optionen

  • -i, --ignore-case
    Groß- und Kleinschreibung werden nicht unterschieden.
  • -w, --word-regexp
    Das Suchmuster muss ein einzelnes Wort sein (also kein Bestandteil eines anderen Wortes).
  • - s, --no-messages
    Unterdrückt die Fehlerausgaben (Standardfehler); sinnvoll bei Skripten
  • -v, --invert-match
    Zeigt alle Zeilen an, die das Muster nicht enthalten
  • -n, --line-number
    Zeigt die Zeilennummer an, in der das Muster gefunden wurde
  • -H, --with-filename
    Zeigt die Namen von Verzeichnissen und Dateien, in den das Muster gefunden wurde
  • -l, --files-with-matches
    Nur Anzeige der Namen der Dateien, in denen das Muster gefunden wurde
  • -B, --before-context= NUM
    Zeigt »Anzahl« Zeilen an, die vor der Zeile mit dem Muster liegen
  • -A, --after-context= NUM
    Zeigt »Anzahl« Zeilen an, die der Zeile mit dem Muster folgen

Eine vollständige Liste aller Optionen erhalten Sie, wenn Sie das folgende Skript auf Ihrem Server ausführen.

  <?PHP
exec
("grep help",
$var);
foreach(
$var as $help)
{
echo 
$help <br>;
}
?>

Sie können mit grep nicht nur nach einem Wort suchen, sondern auch mit regulären Ausdrücken arbeiten. Im Folgenden sehen Sie einen Überblick über die Möglichkeiten, die Ihnen dabei zur Verfügung stehen.

Reguläre Ausdrücke

ˆ (grep, egrep) Beginn einer Zeile
$ (grep, egrep) Ende einer Zeile
. (grep, egrep) Genau ein beliebiges Zeichen
* (grep, egrep) Beliebig viele des vorangegangenen Zeichens
[] (grep, egrep) Ein Zeichenbereich – anstelle von Zeichen können hier vordefinierte Klassen von Zeichen verwendet werden:
[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], und [:xdigit:].
[ˆ] (grep, egrep) Kein Zeichen aus dem Bereich
\< (grep) Am Wortanfang nach dem Muster suchen
\> (grep) Am Wortende nach dem Muster suchen
\(..\) (grep) Eingeschlossenes Muster speichern, auf das man später über zugreifen kann. Sie können bis zu neun Muster speichern.
z\{x\} (grep) x-faches Auftreten des Zeichens z
z\{x,y\} (grep) mindestens x-, maximal y-maliges Auftreten des Zeichens z
+ (egrep) Das vorangegangene Zeichen muss mindestens einmal auftreten
? (egrep) Das vorangegangene Zeichan darf höchstens einmal auftreten
x|y (egrep) Das Zeichen „x“ oder „y“
(abc|xyz) (egrep) Eine Zeichenkette „abc“ oder „xyz“. Die runden Klammern
sind nicht zwingend notwendig und können entfallen.

function copyShellFolder($source, $search)
   @param   string   $source
   @param   string   $search
   @return   array

Die Funktion copyShellFolder() erwartet als Parameter zum einen eine Datei oder ein ganzes Verzeichnis, zum anderen das Suchwort oder den regulären Ausdruck. Den Shell-Befehl können Sie mit den Optionen und dem regulären Ausdruck so erweitern, dass er Ihren Bedürfnissen entspricht.

In unserem Beispiel haben wir die Optionen i (ignoriert Groß- und Kleinschreibung), H (zeigt den Verzeichnisnamen und die Datei mit den Suchtreffern an) und die rekursive Verzeichnissuche genommen.

32:
33:
34:
35:
36:
37:
38:
39:
40:
function copyShellFolder($source$search){

    
$shellBefehl "grep -cH --directories=recurse '$search' $source";

    
exec($shellBefehl$var);
    
    return 
$var;
    
}
Beispiel 11.7: searchShellFile.php

Der Aufruf der Funktion ist mit wenigen Konfigurationsparametern erledigt. Wir benötigen zum einen eine Datei (42) oder ein ganzes Verzeichnis (43) und zum anderen das Suchwort (45) oder den regulären Ausdruck. Als Rückgabewert erhalten wir ein Array mit den Suchtreffern (47).

42:
43:
44:
45:
46:
47:
48:
49:
//$source = 'grep.txt';
$source 'grep/';

$search 'Sie';

$var copyShellFolder($source$search);

print_r($var);
Beispiel 11.8: searchShellFile.php

Die Ausgabe im Browser zeigt für unser Beispiel, dass die Suche in insgesamt drei Dateien zum Erfolg geführt hat. Wir haben durch unsere Optionen jetzt den Dateinamen sowie die Suchtreffer jeder einzelnen Datei in einem Array vorliegen.

Ausgabe im Browser

Array
(
      [0] => grep/grep.txt:12
      [1] => grep/grep_1.txt:9
      [2] => grep/verz/grep_2.txt:12
)


 


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.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   752.00 Byte 878.00 Byte 826.00 Byte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

MECO Systemhaus GmbH & Co. KG weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Microsoft Deutschland GmbH weitere Sponsoren
 

:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


FTP-Upload mit CURL

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Pfingstsonntag für ein bestimmtes Jahr ermitteln

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2014 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de