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, 12:23
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Ich glaube du solltest dich erstmal mit den Grundlagen befassen. Das ist jetzt nicht böse gemeint, nur hat das Ganze so nicht viel Sinn, da es einfach an zu vielen Stellen hapern wird. Dann kannst du dir auch besser selbst helfen.
Am besten gehst du mal die Doku im PHP-Manual durch. Da wird alles gut und verständlich erklärt.
Fehler in deinem Schnipsel:
$documents wird mit keinen Daten gefüttert, da du glob und foreach falsch anwendest.
Richtig (vereinfacht):
PHP-Code:
$documents = array();
foreach (glob('*.html') as $document) {
$documents[] = $document;
}
dann (ebenfalls stark vereinfacht):
PHP-Code:
foreach ($documents as $document) {
$content = strip_tags(file_get_contents($document));
}
// ...
Ich würde dir wirklich nahelegen, dich erstmal mit den Grundlagen zu befassen, damit du einen besseren Überblick hast und schneller zu eigenen Ergebnissen kommst.
Gruß, der Grieche
|

24-11-2006, 12:23
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-11-2006, 12:28
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
PHP-Code:
foreach(glob('pfad/zum/Verzeichnis/*.html') as $filename){
$daten = strip_tags(file_get_contents($filename));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo '<li><a href="'.$filename.'">bla</a></li>';
}else{
//Diese Datei enthält den Begriff nicht
echo "-.-";
}
}
Wenn schon dann so
Gruss
tobi
|

24-11-2006, 13:23
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
hallo,
danke schonmal für die vorschläge. ich werde sie mir am montag genauer ansehen. leider muss ich jetzt auf eine "geschäftreise" gehn, geht übers ganze woe.
was ich festgetellt habe wenn ich das benutze:
PHP-Code:
foreach(glob('D:/xampp/xampp/htdocs/*.html') as $filename){
$daten = strip_tags(file_get_contents($filename));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo '<li><a href="'.$filename.'">'.$filename.'</a></li>';
}else{
//Diese Datei enthält den Begriff nicht
echo "-.-";
}
}
bekomme ich folgende ausgabe:
Zitat:
# Treffer mit hallo :
hallo.html
-.--.-
|
er geht also noch in das else mit rein.
und bei diesem code bekomme ich nur die ausgabe:
Treffer mit hallo :-.-
PHP-Code:
$documents = array();
foreach (glob('*.html') as $document) {
$documents[] = $document;
}
foreach ($documents as $document) {
$content = strip_tags(file_get_contents($document));
}
if(stripos($content,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo('<li><a href="'.$document.'">'.$document.'</a></li>'.PHP_EOL);
}else{
//Diese Datei enthält den Begriff nicht
echo "-.-";
}
mfg
dani
ps: schonmal ein ganz großes danke an alle für die hilfreichen tipps !
|

27-11-2006, 11:31
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
so ich bin wieder zurück ^^.
ich habe heute morgen jetzt schon probiert herauszufiltern warum er auch in die else schleife geht. aber ich bekomm das nicht so gut hin. hab mit echo probiert verschiedene variablen auszugeben und zu schauen wom der fehler liegen könnte aber bis jetzt ergab sich noch nix. hat jemd einen tipp ?
|

27-11-2006, 18:26
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
ich habe heute morgen jetzt schon probiert herauszufiltern warum er auch in die else schleife geht
|
In den else-Teil geht der Code weil wohl nicht jede gefundene HTML Datei den Suchstring im Namen enthält. Es ist gewollt, dass der Code in den else-Zweig geht, wenn der Suchtext nicht im Namen enthalten ist.
PHP-Code:
foreach(glob('D:/xampp/xampp/htdocs/*.html') as $filename){
$daten = strip_tags(file_get_contents($filename));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link drauf anlegen
echo '<li><a href="'.$filename.'">'.$filename.'</a></li>';
}else{
//Diese Datei enthält den Begriff nicht
echo 'Diese Datei enthält den Begriff nicht: '.$filename.'<br />';
}
}
Sollte dir die Namen anzeigen, die den Suchtext nicht enthalten. Wenn der Code dann läuft ersetzt und das echo im else einfach durch continue und die Schelife wird direkt zum nächsten Namen springen.
Gruss
tobi
|

28-11-2006, 11:00
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
hhmmmmm ich hab jetzt das else leer gelassen. im prinzip sowas in der art wie du hast. nur das du die nichtgefundenen auch noch ausgibst. ich möchte aber nicht nach dateinamen suchen sondern nach dateiinhalt. warum will er den suchstring dann auch im namen haben ?
|

28-11-2006, 18:23
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
warum will er den suchstring dann auch im namen haben ?
|
wieso denn Suchstring im Namen. file_get_contents() liest dir den Inhalt der Datei in einen String und diesen durchsuchst du nach dem Suchtext. Wenn gefunden gibst du einen Link auf die Datei aus. Bau doch einfach das continue; in den else-Zweig und es sollte funzen, so wie du es willst.
Gruss
tobi
|

30-11-2006, 15:28
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
Zitat:
Original geschrieben von jahlives
wieso denn Suchstring im Namen. file_get_contents() liest dir den Inhalt der Datei in einen String und diesen durchsuchst du nach dem Suchtext. Wenn gefunden gibst du einen Link auf die Datei aus. Bau doch einfach das continue; in den else-Zweig und es sollte funzen, so wie du es willst.
Gruss
tobi
|
danke das hat schonmal gut geklappt. aber ich habe eine frage. ist es möglich das er nur suchergebnisse anzeigt die exakt mit dem string in der datei über einstimmen ? wenn ich zb nach hallo suche zeigt er mir einen treffer in einer datei an genauso wie wenn ich nur nach h suche. oder es sollten zumindest die ersten 3 buchstaben exakt sein somit wäre die suche verfeinert. schonmal danke an euch.
|

30-11-2006, 17:38
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
wenn ich zb nach hallo suche zeigt er mir einen treffer in einer datei an genauso wie wenn ich nur nach h suche. oder es sollten zumindest die ersten 3 buchstaben exakt sein somit wäre die suche verfeinert
|
Wie bitte ? Wenn du mit strpos() nach hallo suchst, werden dir Treffer nur mit h ganz bestimmt nicht gefunden. Sonst wäre deine PHP Installation im Arsch...
Wenn du die Suche aber flexibler gestalten willst, dann kommst du um reguläre Ausdrücke wohl kaum herum.
Gruss
tobi
|

01-12-2006, 11:51
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
also es ist so ich hab ja des script hier:
PHP-Code:
// Nur html Dateien
foreach(glob('*.html') as $filename){
$daten = strip_tags(file_get_contents($filename));
if(strpos($daten,$_GET['s']) !== false){
//Begriff wurde gefunden also einen Link auf die Datei machen
echo '<li><span style=\"color: #008000\"><a href="'.$filename.'">'.$filename.'</a></span></li>';
}else{
continue;
//Diese Datei enthält den Begriff nicht
//echo '<span style=\"color: #FF0000\">Kein Treffer: '.$filename.'</span><br>';
}
}
dann hab ich im gleichen ordner ne html datei (hallo.html) in der nur der text "hallo" steht (ohne "" ). jetzt such ich über das script nach hallo. dann zeigt er die hallo.html als treffer an. wenn ich jetzt nur ein h angebe bei der suche zeigt er mir wieder hallo.html als treffer an. wie kann das sein? ich habe ApacheFriends XAMPP (basic package) version 1.5.4a bei mir installiert.
mfg
€dit:
hier ein bsp:
das eingegebene gebe ich nur nochmal zur überprüfung aus....
Geändert von dani1609 (01-12-2006 um 11:55 Uhr)
|

01-12-2006, 18:35
|
kuddeldaddeldu
Registrierter Benutzer
|
|
Registriert seit: Sep 2006
Beiträge: 437
|
|
Ja und? Works as designed. "h" ist in "hallo" enthalten. Beschreibe mal klar und deutlich, was Du eigentlich willst.
Meine Vermutung: Du willst nur nach ganzen Wörtern suchen. Dann kommst Du, wie Tobi schon sagt, um reguläre Ausdrücke nicht herum.
LG
|

01-12-2006, 18:35
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
wenn ich jetzt nur ein h angebe bei der suche zeigt er mir wieder hallo.html
|
Du scheinst nicht zu verstehen was strpos() macht. Es sucht nach dem Suchstring und wenn du nach 'h' suchst dann wird die Fkt auch hallo.html finden, weil darin ein 'h' enthalten ist.
Wie ich dir auch bereits geschrieben habe,wäre in diesem Falle wo du nur ganze Treffer willst, wohl der Einsatz von regulären Ausdrücken zu empfehlen.
Schau dir dazu mal das Manual für preg_match() resp preg_match_all() an.
Gruss
tobi
|

01-12-2006, 19:29
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
@topicstarter
Wenn du nur nach dem ganzen Ausdruck suchen willst böte sich ein solcher RegExp an
PHP-Code:
//ganzes Wort
preg_match('/\\\b'.$text.'\\\b/i',$deinString,$treffer);
//Wenn Treffer 0 nicht empty ist
if(!empty($teffer[0])){
//also haben wir einen Treffer
}else{
//haben wir keinen Treffer
}
//nur Wortanfang
preg_match('/\\\b'.$text.'\\\B/i',$deinString,$treffer);
//Wenn Treffer 0 nicht empty ist
if(!empty($teffer[0])){
//also haben wir einen Treffer
}else{
//haben wir keinen Treffer
}
Gruss
tobi
|

04-12-2006, 10:34
|
dani1609
Newbie
|
|
Registriert seit: Nov 2006
Beiträge: 29
|
|
@kuddeldaddeldu
ja ich will nach der genauen zeichenkette suchen die ich in das textfeld eingebe und in $_GET['s'] speichere. diese zeichenkette will ich dann benutzen um in dateien nach einer gleichen zeichenkette zu suchen. ist zb $_GET['s'] = "hallo" und in der datei der string hallo vorhanden dann soll ein link ausgegeben werden mit dem dateinamen in dem der treffer war. wenn ich den link klicke soll man die datei öffnen und direkt zu der stelle springen an der der string steht.
@jahlives
Danke für den Source.
Ich habe nun versucht diesen anzupassen an meinen Code, leider hat das nicht so ganz gefunzt.
PHP-Code:
foreach(glob('*.html') as $filename){
//ganzes Wort
preg_match('/\b'.$_GET['s'].'\b/i',$filename,$treffer);
//Wenn Treffer 0 nicht empty ist
if(!empty($teffer[0])){
for($i=0; $i<10; $i++) {
//also haben wir einen Treffer
echo "".$treffer[$i]."<br>";
}
}else{
//haben wir keinen Treffer
}
}
der erste parameter ist ja das suchmuster und der 2te die zeichenkette nachder ich suche. nur leider hat das bei mir nicht so geklappt. ich hab dann in google was entdeckt das ich ja auch den dateinamen mitübergeben muss  nur gibt dieser code nix aus.also die array ausgabe passt ja aber ich komm nicht so ganz klar wie ich ihm sage das er den string in der datei suchen soll.
mfg
dani
Geändert von dani1609 (04-12-2006 um 10:41 Uhr)
|
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
|