Häufig wird die Frage gestellt, wie man bestimmte Operationen automatisch auf der Ausgabe eines Scripts ausführen lassen kann, bevor die Daten zum Browser gesendet werden.
Ein Beispiel dafür ist die automatische Ersetzung von Links im Stil 'http://...' auf der Seite durch den aktuellen Titel der Seite, auf die sie verweisen. Dieses Verfahren ist hierfür jedoch nur mäßig geeignet, da die HTTP-Anfragen auf die Zieladressen der Links teilweise recht lange dauern können und somit das Ende des gesamten Scripts verzögern.
| Code: |
<?php
// preg_replace-callback Funktion
function generate_linktitle($linkmatch) {
$fulllink = $linkmatch[1];
$target = $linkmatch[2];
// file_get_contents ruft die Seite $target, auf die der Link zeigt, ab.
// Hier könnten daher Zeitprobleme auftreten, wenn das Ziel nicht erreichbar
// ist oder nur langsam reagiert.
$filecontent = @file_get_contents($target);
if ($filecontent) {
// Aus dem Seiteninhalt den Titel auslesen
preg_match('#<title>(.*)</title>#U',$filecontent,$matches);
$pagetitle = $matches[1];
// Den verlinkten Text durch die Seitenüberschrift ersetzen.
return $fulllink.$pagetitle.'</a>';
}
// URL war ungültig oder Host nicht erreichbar, kompletten Link unverändert lassen.
return $linkmatch[0];
}
// OutputBuffer-Handler - ersetzt Links mit Hilfe von generate_linktitle()
function generate_linktitles_ob($content) {
$content = preg_replace_callback(
'#(<a.*href *= *["\'](http://.*)["\'].*>)(http://.*)</a>#U',
'generate_linktitle',
$content);
return $content;
}
// Initialisiert den OutputBuffer-Handler zum Ersetzen von Links.
function generate_linktitles() {
ob_start('generate_linktitles_ob');
}
// Ab hier werden nun alle Links automatisch untersucht.
generate_linktitles();
?>
<a href="http://www.google.de">http://www.google.de</a><br />
<a href="http://www.web.de">http://www.web.de</a><br />
<a href="http://www.ebay.de">http://www.ebay.de</a><br />
|