php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Wikipedia-Seiten prüfen


 
hds26846
15-02-2009, 18:43 
 
ich bin php-neuling !

ich versuche schon seit einigen tagen folgendes problem
zu lösen :


eine wikipedia-datei zb. http://de.wikipedia.org/wiki/Berlin soll
überprüft werden , ob sie noch unter diesem namen vorhanden
ist .

ist sie vorhanden dann ausgabe: datei ist vorhanden !

ist sie nicht vorhanden ausgabe : datei ist nicht vorhanden !

ich hoffe , dies ist mit php möglich .

dank vorab !!!!!!!

 
unset
15-02-2009, 18:58 
 
Die Wikipedia sendet dir bei einem nicht vorhandenen Lemma einen 404-Header. Den kann man natürlich mit PHP auswerten. Stichwort wäre hier zum Beispiel curl.

 
ModestLife
15-02-2009, 19:01 
 
Das dürfte ziemlich einfach sein. Wikipedia schickt bei Seiten dies es nicht gibt (z.B. http://de.wikipedia.org/wiki/Berlin2) einen 404 Header mit. Deshalb kann dir die Response ziemlich egal sein.

Also: Guck dir cURL (http://ch.php.net/curl) an um dir damit die Headers zu holen. Danach validierst du den Statuscode: 200 = Artikel existiert, 404 = Artikel existiert nicht. Eventuell könntest du vor dem Request auch noch überprüfen ob Wikipedia überhaupt erreichbar ist, indem du einen Artikel auf den Statuscode 200 überprüfst, der ganz bestimmt existieren sollte.

 
lennart
15-02-2009, 19:51 
 
Original geschrieben von ModestLife
Eventuell könntest du vor dem Request auch noch überprüfen ob Wikipedia überhaupt erreichbar ist, indem du einen Artikel auf den Statuscode 200 überprüfst, der ganz bestimmt existieren sollte.

Oder einfach die Wikipedia Startseite der jeweiligen Sprache. Das kann aber auch von unterschiedlichen Servern kommen. Eigentlich sollte curl aber auch selbst mitteilen dass der Server nicht erreichbar ist bzw ein Timeout aufgetreten ist.

 
hds26846
15-02-2009, 20:37 
 
danke für die tollen antworten !

ich bin pnp-neuling.

habe in diesem forum auf etwas bessere hilfe gehofft !

aber trotzdem danke für die mühe !!!!

 
Kropff
15-02-2009, 20:45 
 
Original geschrieben von hds26846
danke für die tollen antworten !
...
habe in diesem forum auf etwas bessere hilfe gehofft !

was hast du erwartet? fertigen code?
Original geschrieben von hds26846
aber trotzdem danke für die mühe !!!!
ist das jetzt ernst gemeint oder sarkastisch?

peter

 
Laire
15-02-2009, 20:57 
 
Hatte am Anfang auch immer gohofft fertige codes zu bekommen ;-) Aber so musst du dich damit mehr auseinandersetzten und lernst nach und nach immer mehr php...

Die Hilfestellung ist gut, die dir hier gegeben wird. Wenn Du fertige Codes haben willst, musst du wen engagiere.

 
fireweasel
15-02-2009, 23:31 
 
Original geschrieben von hds26846
danke für die tollen antworten !

ich bin pnp-neuling.

habe in diesem forum auf etwas bessere hilfe gehofft !

aber trotzdem danke für die mühe !!!!

Naja, das ist hier halt so, dass manche gerne Antworten in der Art "Das Problem ist lösbar" oder "Ich hab das Problem schonmal gehabt, du schaffst das auch" verfassen. ;-)

Dieses Forum ist für dich kostenlos. Und wie sagte schon meine Omma? Genau: Was nix kostet, ist auch nix. ;-)

Prinzipiell kann PHP, wenn es richtig eingestellt ist, "entfernte Dateien" ganz einfach mit file_get_contents() (http://www.php.net/manual/de/function.file-get-contents.php) laden. Dazu müssen aber die "geheimnisvollen" URL-fopen-Wrapper aktiviert sein. Und mit file_get_contents() lädt dein Script auch immer die komplette Datei vom Wikipedia-Webserver runter. Also nix HTTP-Statuscode prüfen. In dem Fall müsstest du im Quelltext der Datei nach einem typischen Zeichenmuster schauen, welches bei der "Artikel-nicht-gefunden"-Seite immer auftaucht.

Die elegantere (und Traffic-sparendere) Lösung ist natürlich die, die nur die HTTP-Statuscodes abfragt. Dazu bedarf es aber nicht nur ein wenig HTTP-Hintergrundwissen. Dein PHP muss auch bestimmte Erweiterungen installiert oder bestimmte Funktionen erlaubt haben.

Kuck erstmal, ob deine PHP-Installation was mit CURL (http://www.php.net/manual/de/book.curl.php) anfangen kann:


echo extension_loaded('curl') ? 'Curl geht!' : 'Mist!';


Und wenn nicht, ob du wenigstens fsockopen() (http://www.php.net/manual/de/function.fsockopen.php) verwenden darfst:


echo function_exists('fsockopen') ? 'fsockopen() scheint erlaubt zu sein.' : 'Verdammte Scheiße!';


Im Falle von "kein CURL", aber "fsockopen() geht", melde dich bitte nochmal. Da kann ich dir weiterhelfen.

 
hds26846
16-02-2009, 15:07 
 
danke fireweasel !

ich habe mich etwas geärgert , weil einem php-neuling diverse
begriffe um die ohren gehauen werden ohne etwas mehr hintergrundinformation .

deine antwort hört sich aber gut an !

der test ergab , das fsockopen() vorhanden ist .

curl ist leider nicht installiert .

ich hoffe auf weitere nachrichten

 
unset
16-02-2009, 15:10 
 
Du wirst hier halt ohne selber Mitzuarbeiten keinen Code vorgeworfen bekommen. Wenn du konkrete Versuche machst, dein Ziel zu erreichen, wirst du zwangsläufig irgend einen Quelltext produziert haben. Den kannst du zeigen und da helfe ich gerne. Vorkauen werde ich aber nichts.

 
hds26846
16-02-2009, 15:21 
 
es geht mir nicht um ein fertigen programmcode .

aber folgende antworten bauen einen neuling nicht auf !!


Die Wikipedia sendet dir bei einem nicht vorhandenen Lemma einen 404-Header. Den kann man natürlich mit PHP auswerten. Stichwort wäre hier zum Beispiel curl.



Das dürfte ziemlich einfach sein. Wikipedia schickt bei Seiten dies es nicht gibt (z.B. http://de.wikipedia.org/wiki/Berlin2) einen 404 Header mit. Deshalb kann dir die Response ziemlich egal sein. Also: Guck dir cURL (http://ch.php.net/curl) an um dir damit die Headers zu holen. Danach validierst du den Statuscode: 200 = Artikel existiert, 404 = Artikel existiert nicht. Eventuell könntest du vor dem Request auch noch überprüfen ob Wikipedia überhaupt erreichbar ist, indem du einen Artikel auf den Statuscode 200 überprüfst, der ganz bestimmt existieren sollte.

 
lennart
16-02-2009, 15:55 
 
Ich würde sagen dass war außergewöhnlich freundlich ;)

Schlage nach was du nicht kennst und lerne Grundlagen bevor du mit so etwas anfängst. Kann man nicht oft genug sagen.

 
unset
16-02-2009, 16:21 
 
Original geschrieben von hds26846
es geht mir nicht um ein fertigen programmcode .

aber folgende antworten bauen einen neuling nicht auf !!
[...]
Was erwartest du denn? Alles weitere wäre Programmcode. Hast du Fragen zu einzelnen Fahcbegriffen, dann stelle diese Fragen. Du bist hier der Bittsteller, du willst etwas von uns. Ich muss mir keine Gedanken machen, was genau du erreichen willst, wo deine Stäreken und Schwächen liegen und wie du das am besten umsetzen kannst. Ich helfe dir nur, wenn du etwas konkretes nicht verstehst. Leb damit, oder hoffe, dass dir jemand alles vorkaut.

 
fireweasel
16-02-2009, 20:59 
 
Original geschrieben von lennart
Ich würde sagen dass war außergewöhnlich freundlich ;)

Huch! Da möchte ich aber gar nicht wissen, wie die unfreundliche Antwort ausgefallen wäre.
Sicher, wer sich halbwegs auskennt, wird mit der Auskunft "Prüfe den Statuscode der HTTP-Antwort" zurechtkommen. Aber wer sich halbwegs mit PHP und HTTP auskennt, stellt auch garn nicht solche Fragen. Und wir haben alle mal klein angefangen. Ich habe mich über jedes Quellcodebeispiel gefreut, ganz besonders, wenn noch verständliche Erläuterungen dabei waren. Fsockopen() und alles, was da so dazugehört, ist keine leichte Materie für Einsteiger.

Sooo, und jetzt zu dir hds26846 ...
(Was'n das für'n komisches Pseudo?)

Das Problem sind die Grundlagen. Wie meine beiden Vorposter so treffend bemerkten, ist es ausgesprochen hilfreich, wenn man über entsprechende Basiskenntnisse verfügt. Falls du die nicht hast, empfehle ich dir, dich zuerst mal schlau zu machen, wie das mit dem HTTP und der Kommunikation mit zwischen Client und (Web-)Server so abläuft (Request und Response). Durchaus brauchbar ist hierzu der (deutschsprachige) Wikipedia-Artikel über HTTP (http://de.wikipedia.org/wiki/HTTP).

Weiterhin brauchen wir das PHP-Handbuch zu folgenden Funktionen:
fsockopen() (http://www.php.net/manual/de/function.fsockopen.php)
fwrite() (http://www.php.net/manual/de/function.fwrite.php)
fread() (http://www.php.net/manual/de/function.fread.php)
fclose() (http://www.php.net/manual/de/function.fclose.php)

Du solltest auch einen lokalen Webserver (http://de.wikipedia.org/wiki/XAMPP) zur Verfügung haben, mit dem du dein Script testen kannst.

... und für den Anfang hab ich dir noch ein fertiges Beispiel-Script ergoogelt, das in etwas das macht, was du möchtest -- eine HTTP-Ressource auf ihr "Vorhandensein" prüfen:

phpLinkCheck.php (http://froemter.de/php/phpLinkCheck.phps)

Morgen kucken wir dann mal an einem anderen Script, wie ich das Problem gelöst hätte.

 
unset
16-02-2009, 21:07 
 
Und in Wirklichkeit baust du hier das PHP-Manual nach. Die Querverweise, die Code-Beispiele - kann man auch alles direkt im Handbuch einsehen. Stichworte wurden bereits geliefert. bei konkreten Problemen wird gerne geholfen. Das Mitdenken wir hier aber keinem abgenommen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:57 Uhr.