Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 ICQ Generator
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains und...
https://www.Hosterplus.de
 
 
 

Daten von einer externen Webseite auslesen

Sie befinden sich: Home > Php Tutorial > Daten von einer externen We...

Daten von einer externen Webseite auslesen


Eintrag am:  12.01.2010
Hits / Besucher:  29645
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von    schubertmedia
 
Beschreibung

Heute möchte ich euch in diesem Tutorial vorstellen, wie man mit der PHP Funktion fsockopen() Daten von einer externen Webseite abfragt. Häufig benötigt man diese Funktion, um zum Beispiel ein RSS Feed oder eine gesamte Webseite einzulesen. Natürlich könnte man auch eine einfache Textdatei einlesen, es ist eigentlich alles möglich mit dieser PHP-Funktion von einen externen Host abzufragen. In diesem Tutorial möchte ich zusätzlich darauf eingehen, wie man sogar den aktuellen Seitenheader ausgeben kann. Hierzu gestalte ich eine Selbstdefinierte Php Function, die automatisch entscheiden kann ob der aktuelle Seitenheader oder der HTML Code von der Webseite ausgelesen werden soll.

Um die PHP Funktion fsockopen() zu verwenden, nutze ich wie bereits erwähnt, eine selbstdefinierte Php Function. Diese selbstdefinierte Php Function erkläre ich im ersten Beispiel und im zweiten Abschnitt gehe ich darauf ein, wie man diese Php Function verwenden kann. Für die Leute, die noch nicht wissen was eine selbstdefinierte Php Function ist, können hierzu den Artikel: "Php Function" sich vorher durchlesen.

Also kommen wir zu der Php Function:

<?php

    
/*

    * Created on 10.01.2010 by Nico Schubert

    */

    
function daten_von_host_abfrage($url,

        
$rueckgabe_art 1$timeout 30) {

        
/**

        * Als erstes prüfen wir in der Funktion, ob

            die Variable $url übergeben wurde, wenn

            dies nicht der Fall ist brechen wir die

            Funktion mit return() ab und geben eine

            Fehlermeldung zurück.

        */

        
if ($url == '') {

            return (
'Die Variable $url wurde nicht

                übergeben bei der Funktion

                daten_von_host_abfrage().'
);

        }

        
/**

        * Nun zerlegen wir die Variable $url mit der

            PHP Funktion parse_url() in ihre

            Bestandteile und speichern das

            zurückgegebene Array in der Variable

            $url_bestandteile. Wir stellen vor die

            PHP Funktion parse_url() ein @ Zeichen,

            damit bei einen Fehler, dieser nicht

            ausgegeben wird.

        */

        
$url_bestandteile = @parse_url($url);

        
/**

        * Sollte in der Variable $url_bestandteile ein

            false übergeben wurden, brechen wir die

            Funktion ab und geben mit return eine

            Fehlermeldung zurück.

        */

        
if ($url_bestandteile == false) {

            return (
'In der Variable $url, ist keine

                gültige Internetadresse übergeben

                wurden.'
);

        }

        
/**

        * Nun prüfen wir mit der PHP Funktion isset()

            in Verbindung einer IF Anweisung, ob in

            der Variable $url_bestandteile bei den

            Array, der Schlüssel "host" mit ein

            Inhalt hinterlegt ist. Wenn dies nicht

            der Fall ist, geben wir mit return eine

            Fehlermeldung zurück. Sollte dieser

            Schlüssel mit einen Inhalt vorhanden

            sein, speichern wir im else Weg von der

            IF Anweisung, den Inhalt in der Variable

            $host.

        */

        
if (!isset($url_bestandteile['host']))

        return (
'In der Variable $url konnte kein

            gültiger Host ermittelt werden!'
);

        else

            
$host $url_bestandteile['host'];

        
/**

        * Jetzt prüfen wir genauso wie beim "host",

            den aktuellen "path" und speichern diesen

            anschließend in der Variable $path

        */

        
if (!isset($url_bestandteile['path']))

        return (
'In der Variable $url konnte kein

            gültiger Path ermittelt werden!'
);

        else

            
$path $url_bestandteile['path'];

        
/**

        * Zu guter letzt müssen wir genauso noch in

            der Variable $url_bestandteile das

            "scheme" überprüfen und anschließend

            wieder in der Variable $scheme speichern.

        */

        
if (!isset($url_bestandteile['scheme']))

        return (
'In der Variable $url konnte kein

            gültiges Scheme ermittelt werden!'
);

        else

            
$scheme $url_bestandteile['scheme'];

        
/**

        * Als nächsten Schritt müssen wir überprüfen

            mit einer switch() Anweisung, ob in der

            Variable $scheme "https" oder "http" steht.

        */

        
switch ($scheme) {

            case 
'https':

            
/**

            * Wenn in der Variable $scheme "https"

                steht, definieren wir in der Variable

                $out unseren Aufruf, dass dieser per

                GET und verschlüsselt werden soll.

            */

            
$out "GET ".$path." HTTPS/1.1
"
;

            
/**

            * Da wir unserer Abfrage verschlüsselt

                versenden möchten, müssen wir vor

                unseren $host ein entsprechendes

                "ssl://" anhängen.

            */

            
$host "ssl://".$host;

            
/**

            * Zusätzlich müssen wir in der Variable

                $port den aktuellen Port für eine SSL

                Verbindung speichern. Auf diesen Port

                stellen wir unserer Anfrage.

            */

            
$port 443;

            break;

            case 
'http':

            
/**

            * In diesem Abschnitt definieren wir den

                Port auf 80 in der Variable $portund

                bereiten die Übergabe unserer Anfrage

                mit GET vor. Dazu speichern wir

                unsere Anfrage in der Variable $out.

            */

            
$port 80;

            
$out "GET ".$path." HTTP/1.1
"
;

            break;

            default:

            
/**

            * Sollte ein nicht definiert Scheme

                gefunden werden in der Variable

                $scheme, brechen die Funktion ab und

                geben mit return() eine Fehlermeldung

                zurück.

            */

            
return ('Der übergebene Scheme

                ('
.$scheme.') bei der Variable $url,

                wird in der PHP Funktion

                daten_von_host_abfrage() nicht

                unterstützt. '
);

            break;

        }

        
/**

        * Nachdem wir nun alle Variablen überprüft

            haben, können wir unsere

            Socket-Verbindung mit der PHP Funktion

            fsockopen() zu den Host, den wir in der

            Variable $host gespeichert haben

            aufbauen. Wir schreiben hier bei vor die

            PHP Funktion fsockopen() ein @ Zeichen,

            damit eine eventuelle PHP Fehlermeldung

            nicht ausgegeben wird. Es wird von der

            PHP Funktion fsockopen() ein Zeiger auf

            die Datei zurückgegeben. Diesen Zeiger

            kann man mit der PHP Funktion fwrite()

            weiterverarbeiten. In unserem Beispiel

            legen wir den Zeiger in der Variable $fp ab.

        */

        
$fp = @fsockopen($host$port$errno,

            
$errstr$timeout);

        
/**

        * Jetzt definieren wir die Variable

            $daten_rueckgabe, in dieser Variable

            speichern wir anschließend unserer

            Rückgabe, die der Host zurückgibt.

        */

        
$daten_rueckgabe '';

        
/**

        * Sollte keine Verbindung aufgebaut werden

            können mit der PHP Funktion fsockopen()

            gibt diese ein False zurück, dies werden

            wir an dieser Stelle mit einer IF

            Anweisung aus und brechen gegebenenfalls

            mit return() unseren Funktionslauf ab.

        */

        
if (!$fp) {

            return (
$errstr ."(".$errno.")<br />n");

        } else {

            
/**

            * Wenn wir nun einen aktuellen Dateizeiger

                haben in der Variable $fp, können wir

                unsere Anfrage die wir über die

                Variable $out stellen, mit Host und

                Connection: Close erweitern.

            */

            
$out .= "Host: $host
"
;

            
$out .= "Connection: Close

"
;

            
/**

            * Jetzt senden wir unserer aktuelle

                Abfrage an den Host.

            */

            
fwrite($fp$out);

            
/**

            * Nun führen wir eine while() Schleife

                aus, bis der aktuelle Dateizeiger am

                Ende ist.

            */

            
while (!feof($fp)) {

                
/**

                * Mit der PHP Funktion fgets()

                    speichern wir jede einzelne

                    Rückgabezeile in der Variable

                    $daten_rueckgabe.

                */

                
$daten_rueckgabe .= fgets($fp128);

            }

            
/**

            * Zu guter letzt schließen wir die

                geöffnete Verbindung mit der PHP

                Funktion fclose().

            */

            
fclose($fp);

        }

        
/**

        * Da wir nun in der Variable $daten_rueckgabe

            die gesamte Rückgabe vom Host gespeichert

            haben, müssen wir den Header von der

            Webseite trennen. Dieser ist aktuell mit

            zwei Zeilenumbrüchen getrennt. Hierzu

            nutzen wir die PHP Funktion explode() und

            list().

        */

        
list($header$html) = explode("

"
,

            
$daten_rueckgabe);

        
/**

        * Nun prüfen wir als letztes den übergebenen

            Parameter, den wir in der Variable

            $rueckgabe_art gespeichert haben, ob

            dieser "1" oder ein anderer ist. Wenn

            dieser "1" ist geben wir den Header aus,

            ansonsten geben wir den HTML Code der

            Rückengegebenen Webseite mit der PHP

            Funktion return() zurück.

        */

        
if ($rueckgabe_art == 1)

        return(
$header);

        else

            return(
$html);

         

    }

?>

So nun sind wir mit unserer selbst definierten Php Function fertig. Als nächstes erkläre ich ihnen, wie sie mit der definierten Function eine Webseite ausgeben.

Beispiel für den Aufruf, der Function:

<?php

    
/*

    * Created on 10.01.2010 by Nico Schubert

    */

    /**

    * Wenn wir nun die Funktion aufrufen möchten,

        müssen wir dieser Funktion einen gültigen URL

        übermitteln. Als erstes definieren wir die

        Variable $url, in dieser Variable speichern

        wir unsere URL, wo wir unsere Anfrage stellen

        möchten.

    */

    
$url 'http://www.schubertmedia.de/index.php';

    
/**

    * In der Variable $art geben wir an, ob die

        Funktion den aktuellen Seitenheader oder die

        Webseite zurückgeben werden soll. Die

        Funktion liefert bei "1" den Seitenheader und

        bei "2" den Sourcecode von der Webseite.

    */

    
$art 1;

    
/**

    * Zusätzlich definieren wir in der Variable

        $timeout, wie lang der Server warten soll auf

        eine Antwort, bis die aktuelle Anfrage

        abgebrochen wird.

    */

    
$timeout 10;

    
/**

    * So nun als letztes müssen wir die Funktion, die

        wir bereits im oberen Bereich erklärt haben

        noch aufrufen mit unseren definierten

        Parametern und geben diese anschließend den

        Rückgabewert mit echo aus.

    */

    
echo daten_von_host_abfrage($url$art$timeout);

?>

 

Jetzt sind wir fertig. :) Ich Wünsche euch viel Spaß mit dieser PHP Function und treibt damit bitte kein Unfug! Wenn Ihr noch Fragen zu dieser PHP Function habt, so nutzt bitte unser Supportforum. Nun zu guter letzt, alle PHP-Funktionen wofür wir bereits verschiedene Tutorials geschrieben haben.

echo - Erklärung wie man mit der PHP Funktion echo einen Text in PHP ausgeben kann.
PHP Function - Hier wird erklärt, wie sie eine selbstdefinierte PHP Function erstellen.
IF Anweisung - Einführung in die IF Anweisung unter PHP.
isset() - Prüfen einer Variable, ob diese definiert ist.
parse_url() - Eine Adresse in ihre Bestandteile zerlegen.
explode() - Eine Zeichenkette mit einen definierten Trennzeichen aufsplitten.

 

Tags:

 

Artikel hinzufügen bei: