Sven Rautenberg: http_test_existance mehrfach in einem Dokument

Beitrag lesen

Moin!

Ich habe auf meiner Website eine PHP-Funktion eingebaut, die externe Links abhängig vom Datum auf ihre Existenz prüft und entsprechende Texte ausgibt. Dazu habe ich auf dieser SelfHTML-Seite die entsprechende Funktion gefunden und mit meinen Daten gefüllt. Das funktioniert auch alles einwandfrei, allerdings nur dann, wenn ich die Funktion nur an einer Stelle meines PHP-Dokuments verwende. Ich möchte sie allerdings mehrfach verwenden und habe sie deshalb mit unterschiedlichen Inhalten an zwei Stellen eingefügt.

Die Funktion mehrfach einfügen ist keine gute Idee (derselbe Funktionsname darf nur ein einziges Mal definiert werden) - vor allem dann, wenn die Funktion an beiden Stellen, wo sie definiert wird, absolut identisch ist:

function http_test_existance($urlheute) {
 return (($fp = @fopen($url, 'r')) === false) ? false : @fclose($fp);
}
function http_test_existance($urldonnerstag) {
 return (($fp = @fopen($url, 'r')) === false) ? false : @fclose($fp);
}

Wie du siehst: Der Inhalt der Funktion ist bis aufs Byte identisch. Der einzige Unterschied ist der Parameter - und genau dort liegt dein Denkfehler und die Lösung:

Wenn in einer Funktionsdefinition das hier steht:

function http_test_existance($urldonnerstag) {

Dann kannst du innerhalb der Funktion auf eine Variable $urldonnerstag zurückgreifen, in der das drinsteht, was beim Funktionsaufruf als erster Parameter übergeben wurde.

In deinen Funktionen greifst du nirgendwo auf die definierten Parameter zu! Einmal nennst du den Parameter $urldonnerstag, ein andernmal $urlheute, und in keinem Fall wird dieser Parameter in der Funktion nochmal benutzt - was benutzt wird, ist die Variable $url.

Und das ist dein Fehler: Du definierst die Funktion zweimal, weil du vermutlich meinst, dass es für zwei unterschiedliche Variablen AUSSERHALB der Funktion nötig wäre - und das ist falsch.

Definiere EINMAL die Funktion. Verwende den Parameter der Definition dann innerhalb der Funktion. Der Funktionsaufruf erfolgt mit Variablen oder festem String dann gerne an mehreren Stellen. Der Code dafür ist bei dir schon richtig.

Dein Code ist an einer grundsätzlichen Stelle zu kritisieren: Er ruft pro Seitenaufruf deiner Seite bei meedia.de zwei komplette HTML-Seiten ab, ohne die Daten zu verwenden. Das ist für deinen persönlichen Gebrauch, bei dem du ein- oder zweimal am Tag auf deine Seite gehst und die Links angezeigt bekommst, tolerierbar - sollten diese Links allerdings mehrere hundert Mal pro Stunde gezeigt werden, solltest du dir überlegen, das einmal festgestellte Ergebnis irgendwo abzuspeichern, anstatt immer wieder zwei HTTP-Requests an eine fremde Seite zu schicken.

Grüße Sven