Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
externe Seite nach Begriffe durchsuchen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
externe Seite nach Begriffe durchsuchen


 
Dude*
08-08-2006, 15:08 
 
Hallo,

ich bin zwar schon einigermaßern erfahren in PHP, stelle mich aber dennoch vor ein ziemlich unlösbares Problem.

Ist es möglich durch Angabe einer URL den Quellcode nach bestimmten Begriffen zu durchsuchen und auszulesen ???

Also als Beispiel:

Ich will auf meiner Seite als PHP Script ausgeben, was die neusten Schlagzeilen von www.web.de sind. Dazu müsste ich die URL irgendwie in PHP eingeben, und dann per Funktion (das ist die Frage wie das nun geht) dann nach dem Begriff "Schlagzeilen" suchen, und dann dem Quellcode die nächsten 100 Zeilen rauskopieren...


Ich weiß, das dies warscheinlich illegal ist, aber ich will es für meine eigene Seite auf einem anderen Server benutzen, dachte nur dass dieses Beispiel es am einfachsten Beschreiben könnte.

 
newphp
08-08-2006, 15:18 
 
das funktoniert mit


$seite=file($url);



dann kannst du das Array $seite durchsuchen

da sind deine Freunde stristr, explode usw.

 
onemorenerd
08-08-2006, 15:30 
 
Das nennt man Kontentklau und alle, die danach fragen, wollen sich nur selbst beklauen. ;)

Mit allow_url_fopen=on wäre es ein Zweizeiler:
$site = file_get_contents($url);
echo strpos($site, $search) !== false
? substr($site, strpos($site, $search), $length)
: 'nichts gefunden';
Aber wie dein einigermaßern erfahrenes Auge erkennt, werden nicht 100 Zeilen sondern $length Zeichen ausgegeben. Begründung: Beides ist Schwachsinn, aber obige Variante ist kürzer. :D

Wenn das gesuchte Wort irgendwo in der Seite steht und du von der Fundstelle an X Zeichen oder Zeilen ausgibst, dann gibst du damit HTML-Code aus, der ganz sicher nicht zur HTML-Struktur deiner Seite passt.

Mit htmlspecialchars(substr(...)) ist dir auch nicht geholfen, denn du willst deinen Usern ja nicht den Quelltext zeigen ...

Also brauchst du einen regulären Ausdruck, der jedweden HTML-Code aus der Seite entfernt. Könnte so aussehen:
$site = file_get_contents($url);
$site = preg_replace('/<.*>/U', '', $site);
echo strpos($site, $search) !== false
? substr($site, strpos($site, $search), $length)
: 'nichts gefunden';
Der Ausdruck ist allerdings nicht optimal. Falls du ihn wirklich unverändert verwenden willst, kannst du statt preg_replace() auch strip_tags() bzw. gleich fgetss().

 
onemorenerd
08-08-2006, 15:33 
 
Original geschrieben von newphp
das funktoniert mit ...
Nein, funktioniert nicht.

Gegenbeispiel: Das sei die zu durchsuchende Webseite
Such\n
wort ...
file() macht daraus array('Such\n', 'wort') und wenn ich das nach 'Suchwort' durchsuche, werde ich nicht fündig. Sollte ich aber, denn wenn ich die Seite im Browser lade, sehe ich 'Suchwort'.

 
newphp
08-08-2006, 15:40 
 
sorry hab mich verlesen in dem Fall findet er das nicht da geb ich dir recht....

 
Dude*
09-08-2006, 02:13 
 
cool, danke dass ihr mir so schnell geantwortet habt. Denke das wird funktionieren

 
hgssven
09-08-2006, 08:46 
 
Hallo,
über diesen Befehl kann mann den Inhalt der Seite direkt auslesen!
Man muss also nicht den Quelltext bearbeiten oder editieren!


$fp = @fopen("http://www.yyy.de","r");

while(!feof($fp))
{
$zeile = fgets($fp, 200); //200 Anzahl Zeichen einer Zeile
}

fclose($fp);



Innerhalb der Schleife werden immer die einzelnen Zeilen der Seite
ausgegeben und können dort durchsucht werden!

Funktioniert bei mir sehr gut!

 
onemorenerd
09-08-2006, 16:21 
 
@hgssven: Unterschied zu file_get_contents()?


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13 Uhr.