Hallo Ives, der angesprochene Workaround ist nicht zu empfehlen, da es wenig sinnvoll ist, den Programmcode aus der footer.php bei jedem Aufruf der index.php auszuführen, nur um die Ausgabe in den Ausgabe-Puffer zu kippen und eine Variable zu überprüfen.
Der Ansatz von TSc - die Prüfung auf Datei-Ebene zu erledigen - ist da IMHO schon sinnvoller. Ich habe im Hinblick auf Deine Anforderung (Linkschutz in WP-Themes) etwas weiter gedacht und folgendes implementiert. Der Code für die index.php öffnet die footer.php im selben Verzeichnis, parsed alle Links aus dem Dokument und bildet für jeden eine simple Prüfsumme.
Anschließend wird die Liste der Prüfsummen mit einer weiteren Liste, die die Prüfsummen der zu überprüfenden Links enthält, verglichen. Bei jeder Übereinstimmung wird der Wert der Prüfsumme zu einem Zähler addiert, um so am Ende festzustellen, ob alle Links vorhanden sind. Wenn alle vorhanden sind, passiert nichts - falls nicht, stirbt das Script per wp_die() mit der gewünschten Meldung.
CODE
function dopesum ( $url )
{
$p = 23; for ( $x = 0; $x < strlen($url); $x++ ) $p += ord ( $url[$x] ) * 5; return $p;
}
$cnt = file_get_contents ( dirname(__FILE__) . base64_decode ( "L2Zvb3Rlci5waHA=") );
$warn = "Q29weXJpZ2h0IFZlcmxldHp1bmcsIGF1c2Z1ZWhyZW4gbmljaHQgbW9lZ2xpY2gu";
$smap = array ( 7443 );
$sall = 0; $found = 0;
$match = array();
$temp = array();
foreach ( $smap as $s ) $sall += $s;
$regex = '/href=((["\']?)([^ ]*)\2).*?>/i';
$r = preg_match_all ( $regex, $cnt, $match );
foreach ( $match[3] as $m ) $temp[] = dopesum ( $m );
foreach ( $smap as $s )
if ( in_array ( $s, $temp ) )
$found += $s;
if ( $sall != $found )
wp_die( base64_decode ( $warn ) );
Kurze Anleitung:
- Den Code nach Möglichkeit am Anfang der index.php vom Theme platzieren (kann auch noch geschrumpft werden; sollte btw an anderer Stelle auch funktionieren, allerdings könnte die Ausgabe dann im Falle von entfernten Links etwas komisch aussehen)
- Die Meldung, die ausgegeben wird, wenn die Links fehlen, ist in der Variable $warn gespeichert, allerdings Base64. (Hintergrund: damit man die Überprüfung nicht sofort via search-in-files mit dem Ausgabe-Text findet...)
- in dem array $smap werden die Prüfsummen der Links hinterlegt, deren Existenz geprüft werden soll. Um weitere Prüfsummen (Berechnung folgt) einzufügen, bitte folgende Syntax verwenden:
CODE
$smap = array ( sum1, sum2, sum3 );
- Die Prüfsummen können entweder von Hand berechnet werden ( Startwert 23; ASCII-Wert jedes Zeichens der URL mit 5 multiplizieren und zur Prüfsumme addieren), oder durch Verwendung von folgendem kleinen Code-Schnipsel. Einfach in eine Datei packen, zB mksum.php und in folgender Form im Browser aufrufen: /mksum.php?url=http://www.deinlink.tld
CODE
function dopesum ( $url )
{
$p = 23; for ( $x = 0; $x < strlen($url); $x++ ) $p += ord ( $url[$x] ) * 5; return $p;
}
if ( isset ( $_GET['url'] ) )
{
echo "u= " . $_GET['url']. "<br/>";
echo "s= " . dopesum ( $_GET['url'] ) . "<br/>";
}
Vielleicht kannst Du damit ja etwas anfangen, bei Fragen/Problemen gerne auch PN.
Gruß
Christian