PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

24-11-2006, 08:46
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
Suche in Dateien die 15263x
Hallo,
ich bin relativ neu auf dem gebiet von php. Ich würde mir gerne eine Suche in php programmieren, aber ich komm damit nicht so ganz zurecht. In google hab ich keine passenden Schnipsel gefunden (vllt falscher suchbegriff  ) Naja und hier im Forum hab ich zwar nen paar anhalte gefunden aber keine passende Lösung für mich. mach da jetzt schon bissel länger rum aber weis nimmer so wirklich weiter deshalb dachte ich mir kann hier einer helfen. Es sollte so in etwa aussehen:
ich habe zb 3 dateien (html). in diesen dateien steht jeweils viel text
jetzt soll ich per php forumlar ein suchbegriff eingeben und php sucht mir dann raus in welchen der lokalen dateien dieses stichwort vorkommt und gibt mir dann die treffer aus als link. wenn ich dann auf einen link klicke soll die er die datei öffnen in dem begriff vorkam und sofort zu der stellen springen und evtl das wort markieren.
Aber das soll jetzt nciht heissen ihr soltl mir das mal amchen sondern ich hätte gerne lösungsansätze und evtl links dazu oder so bzw ein tutorial.
mfg
dani
|

24-11-2006, 08:56
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Wenn die Texte nur in den Dateien existieren und nicht in einer Datenbank abgelegt sind, dann würde ich spontan auf die preg_-Funktionen setzen.
Also z.B. mit file_get_contents oder Konsorten die Texte in Strings laden und mit preg_match bzw. preg_match_all nach eventuellen Treffern suchen und bei Erfolg auswerten. Um per Link zur jeweiligen Datei zu gelangen und den Suchbegriff zu markieren, kannst du dann den bzw. die benötigten Parameter via $_GET an die jeweilige Datei übergeben. Das als kleiner Beispielansatz.
|

24-11-2006, 08:57
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Das Form wirst du easy hinkriegen SelfHtml dann musst du anhand des Suchbegriffst die Dateien durchsuchen, wobei dir folgende Fkt helfen könnten Ganz allgemein findest du Infos im Manual und Tutorial zu RegExp bei der Suma deiner Wahl.
Gruss
tobi
|

24-11-2006, 09:43
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
Hallo
also regex ist ja eigentlich nicht das was ich bruache oder ich komm grade bisschen durcheinander.
Zitat:
Hier sind ein paar Anwendungsbeispiele wo man Regex gebrauchen könnte.
1.
Regex kann man zum Beispiel benutzen um ein Eingabefeld auf Gültigkeit zu prüfen. Dies macht man z.B. bei einer Eingabe einer Emailadresse oder Spielernamens.
2.
Manchmal möchte man aus einem fertigen String, z.B. von einer anderen Seite, bestimmte Informationen auslesen. Diese kann man dann in seinem Script weiter verarbeiten. Wenn möglich sollte man aber sscanf benutzen. Man sollte nicht immer die Regex-Engine anwerfen.
3.
Mit Regex kann man auch Teilstrings in einem String ersetzen lassen die man nicht ohne weiteres mit str_replace ersetzen lassen kann. Für Smilies braucht man z.B. kein Regex, die kann man einfach mit str_replace in die Bilder umwandeln.
|
mein code ist bisher soweit
PHP-Code:
<h1>Suche in Dateien</h1>
<form method="get">
<p>
<label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
<br>
<input type="submit" />
</p>
</form>
<?php
if(!$_GET['s'])
die();
echo "Treffer mit <b>".$_GET['s']."</b> :";
?>
weiter bin ich noch nicht gekommen. jetzt habe ich es schonmal soweit das ich das suchwort in get[s] drin habe. aber wie verfahre ich weiter?
müsste das in etwa so gehen oder ?
PHP-Code:
if((file_get_contents($datei), $_GET['s']) !== false)
....
€dit:
also ich habs mal so bis jetzt und der gibt dann "1" aus also hat er das suchwort in der datei gefunden. nur müsste ich jetzt einen link zu der datei machen und das gesamte verzeichnis (also dessen dateien) sowie unterverzeichnisse durchsuchen.
hier der neue code:
PHP-Code:
Suche in Dateien<br>
<form method="get">
<p>
<label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
<br>
<input type="submit" />
</p>
</form>
<?php
if(!$_GET['s'])
die();
echo "Treffer mit <b>".$_GET['s']."</b> :";
if (file_get_contents("test.txt",$_GET['s']))
echo "1";
?>
Geändert von dani1609 (24-11-2006 um 10:03 Uhr)
|

24-11-2006, 09:59
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Nein. Mit deinem Ansatz bist du definitiv an jeder möglichen Lösung vorbei. Am besten schaust du dir mal die Funktionsbeschreibung von file_get_contents im Manual an, denn der zweite, optionale Paramter hat eine ganz andere Funktion, als du glaubst. Darüber hinaus sind reguläre Ausdrücke genau das, was du brauchst. Insofern würde ich mich nochmal mit der Materie befassen. Einen Lösungsansatz habe ich dir weiter oben ja schon gegeben.
EDIT:
Ich sehe gerade, dass ich mich verlesen habe, da du file_get_contents gar keinen zweiten Parameter übergibst...
Zitat:
Original geschrieben von dani1609
PHP-Code:
if((file_get_contents($datei), $_GET['s']) !== false)
....
|
EDIT:
Dieses Konstrukt macht für mich nur immernoch keinen Sinn. 
Geändert von Griecherus (24-11-2006 um 10:04 Uhr)
|

24-11-2006, 10:28
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
ich habs ja jetzt anders. aber die funktion die ich benutzte speichert ja nur den dateinhalt in einem string. also muss ich diesen string dann durchsuchen oder und nicht die datei direkt?
PHP-Code:
Suche in Dateien<br>
<form method="get">
<p>
<label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
<br>
<input type="submit" />
</p>
</form>
<?php
if(!$_GET['s'])
die();
echo "Treffer mit <b>".$_GET['s']."</b> :";
if (file_get_contents("test.txt",$_GET['s']))
echo "1";
?>
|

24-11-2006, 10:31
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
regex ist ja eigentlich nicht das was ich bruache oder ich komm grade bisschen durcheinander.
|
Ich tippe auf zweiteres  , weil RegExp das einzige ist, wie du das umsetzen kannst. Du willst ja, dass die Suchtreffer auf der Seite markiert werden (z.B. mit einem span und background-color) und das mein Guter geht nur mit RegExp. Aber verwende besser preg_replace() und nicht preg_match().
preg_replace() sucht und ersetzt im gleichen.
Gruss
tobi
|

24-11-2006, 10:35
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Ich glaube du hast meinen Beitrag nicht ganz gelesen... Schau mal bitte im PHP-Manual nach, welche Funktion der zweite Parameter von file_get_contents hat (in deinem Fall $_GET['s'])...
Nochmal: Du lädst eine Datei mit file_get_contents in einen String und suchst mit preg_replace (@jahlives: danke für die Verbesserung  ) nach deinem gewünschten Suchwort usw.
|

24-11-2006, 10:40
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
also ich danke euch mal jungs.
das mit dem regex sprich markieren usw will ich erstmal weglassen wichtig ist das die suche jetzt mal funzt also man klickt auf den link und springt dann zu der stelle an der datei. kann mir jemand vllt bisschen auf die sprünge helfen ? ich raffs echt net.
// entfernen von Tags und einlesen in string
if (strip_tags(file_get_contents("test.txt",$_GET['s'])))
|

24-11-2006, 10:44
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Sag mal, hast du meine letzten drei Beiträge überhaupt gelesen? Ich habe dich jetzt drei mal auf einen grundlegenden Fehler hingewiesen und du bist weder darauf eingegangen, noch hast du den Fehler verbessert.  Mehr als versuchen dir zu helfen kann ich nicht...
|

24-11-2006, 10:46
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
woher hast du den Sch... dass file_get_contents() den Suchbegriff als Argument brauchen könnte. Lies das file ein und stelle mittels strpos() fest ob der Suchbegriff drinn vorkommt
PHP-Code:
$daten = strip_tags(file_get_contents('datei.html'));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
}else{
//Diese Datei enthält den Begriff nicht
}
Gruss
tobi
|

24-11-2006, 10:56
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
@Griecherus
sorry ich hab des erst jetzt durch das beispiel von jahlives kapiert was du gemeint hast. ich stand irgendwie auffm schlauch ich weis auch net.
@jahlives
schonmal danke für das script. hast mir jetzt schon gut geholfen. den sch.... hab ich von irgendeiner seite aus google aber find sie nimmer.
ich habs jetzt grade so:
PHP-Code:
$daten = strip_tags(file_get_contents('test.html'));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo('<li><a href="test.html">bla</a></li>'.PHP_EOL);
}else{
//Diese Datei enthält den Begriff nicht
echo "-.-";
}
?>
nur sollte ich die datei ja nicht fest angeben, sondern er sollte ja suchen in dateien und wenn er einen treffer hat irgendwie den pfad auslesen von der datei und diesem beim link verwenden. Ich probier mal mit der funktion getPathName() bissel rum...
|

24-11-2006, 11:03
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Prinzip: Du legst alle Dateien, die durchsucht werden sollen, in ein Array ab. Dieses durchläufst du dann mit foreach und wendest auf jede Datei deinen Code-Schnipsel an.
PHP-Code:
$documents = array(
'document_1.html',
'document_2.html',
'document_3.html'
);
foreach ($documents as $document) {
// dein Codeschnipsel
}
Das wäre eine - grob dargestellte - Möglichkeit. Die Dokumente könnten z.B. auch dynamisch ins Array abgelegt werden, in dem du ein bestimmtes Verzeichnis ausliest... Aber das würde jetzt erstmal zu weit führen.
|

24-11-2006, 11:06
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Des Griechen Lösung würde ich dir empfehlen
Gruss
tobi
p.s. wenn du Verzeichnisse auslesen willst dann schau dir glob() an
|

24-11-2006, 11:15
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
cool danke euch. also wenn ichs so amche klappt das schonmal aber ich will ja die verzeichnisse durchsuchen.
omg ich habs wieder verrissen
des mit dem foreach stimmt net so ganz. des prinziop kapier ich. ich lese die ganze dateinamen ein und speicher die in nem array und dann kann ich die ja mit der 2ten foreach verarbeiten. aber was mach ich wenn ich unterverzeichnisse hab, da greift ja glob dann nicht.
PHP-Code:
$documents = foreach (glob("*.html") as $filename);
foreach ($documents as $document) {
$daten = strip_tags(file_get_contents('test.html'));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo('<li><a href="test.html">bla</a></li>'.PHP_EOL);
}else{
//Diese Datei enthält den Begriff nicht
echo "-.-";
}
}
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|