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
 
Script Seite

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

speicherzentrum.d...
Bei den Anbieter bekommt man Webspace, Domains und...
http://www.speicherzentrum.de
Artfiles.de
Bietet Serviceorientierte Internetdienstleistungen...
http://www.Artfiles.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:  27434
Sprache: Deutsch
Kategorie:  Fortgeschrittene Tut...
Tutorial Art:  eigenes
 

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.1rn";
            
/**
            * 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.1rn";
            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: $hostrn";
            
$out .= "Connection: Closernrn";
            
/**
            * 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("rnrn",
            
$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


 

Verlink uns, wenn Dir das Tutorial gefallen hat:
Artikel hinzufügen bei: