<?php
$datum = date("Y-m-d");
/* Datenbankverbindungsinformationen */
$dbuser = "******";
$dbpassword = "******";
$db = "*****";
$dbserver = "localhost";
$connection = mysql_pconnect( $dbserver, $dbuser, $dbpassword ) or
die( 'Could not open connection to server' );
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");
mysql_select_db( $db, $connection ) or
die( 'Could not select database '. $db );
/* Holt Backlinkurl, Zielurl, Ankertext aus DB und prüft ob der Datensatz heute schon mal geprüft wurde mit $datum */
$sql = "
SELECT id, backlinkzielurl, backlinkurl, backlinktext
FROM backlink_test
WHERE linkart IN ('partner','kommentar')
AND datumletztercheck <> '".$datum."'
";
$result = mysql_query( $sql, $connection ) or die(mysql_error());
$row_allLinkCheck = mysql_fetch_assoc($result);
$totalRows_allLinkCheck = mysql_num_rows($result);
//Start Zeitmessung
$start1 = microtime(true);
function get_url( $url ) // Auslese des Inhaltes einer URL mit einer Browsersimulation
{
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header[] = "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3";
$header[] = "Accept-Encoding: gzip,deflate";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Keep-Alive: 115";
$header[] = "Connection: keep-alive";
$header[] = "Pragma: no-cache";
$header[] = "Cache-Control: no-cache";
$cookie = tempnam ("../tmp", "CURLCOOKIE");
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1" );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $ch, CURLOPT_ENCODING, 'gzip,deflate' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 5 );
//curl_setopt( $ch, CURLOPT_REFERER, 'http://www.google.com');
//curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false ); # wird für https urls benötigt
//curl_setopt( $ch, CURLOPT_USERPWD, 'user:passw' );
$html = curl_exec($ch); // führt curl aus
curl_close($ch); // schließt curl wieder
return $html; // gibt den Inhalt der Seite zurück
} // schließt die Funktion get_url
// Abarbeiten und prüfen aller Backlinks Seite für Seite aus der DB mit der do while Schleife
do {
$backlink_url = $row_allLinkCheck['backlinkurl']; // backlink aus Datenbank
$ziel_url = $row_allLinkCheck['backlinkzielurl']; // Ziel Seite aus Datenbank
$backlinktext = $row_allLinkCheck['backlinktext']; // Ankertext aus Datenbank
$id = $row_allLinkCheck['id']; // wird für Datenbankupdate benötigt
$html = get_url($backlink_url); // funktion aufrufen cUrl und Übergabe der Backlinkurl
// parse html in ein DOMDocument
$dom = new DOMDocument();
@$dom->loadHTML($html);
// alle Links rausziehen
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
// Link Checken: ob online, follow und Datum setzen
$followCheck = '';
$linkCheck = 'offline';
/* Durchläuft alle Links einer Seite */
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
$ziel_url = trim ($ziel_url, " \t\n\r\0\x0B/");
$ziel_url = stripslashes($ziel_url);
$url = trim ($url, " \t\n\r\0\x0B/");
$url = stripslashes($url);
/* Wenn $ziel_url aus DB und Url -> $url der geparsten Seite gleich sind
dann ist Seite online. Weiterer Check ob follow Link und Ankertext gleich sind */
if ($ziel_url == $url) {
$followCheck = 'follow';
$linkCheck = 'online';
$ankertext = $href->nodeValue;
$rel = $href->getAttribute('rel');
$rel = strtolower($rel); // in kleinbuchstaben umwandeln
if ($backlinktext != $ankertext) {
$linkCheck = 'falscher Ankertext';
}
if (preg_match("/\bnofollow\b/i", $rel)) {
$followCheck = 'nofollow';
}
break; // wenn die URL gefunden wurde die schleife verlassen. Die restlichen Links der Seite werden so nicht mehr geprüft.
} // Ende if $ziel_url
} // Ende for schleife
// Status in die Datenbank eintragen nach Durchlauf der for schleife
// Status nur eintragen wenn lastDate nicht gleich $datum also heute
mysql_query("UPDATE backlink_test SET backlinkstatus='$linkCheck', backlinkfollow='$followCheck', datumletztercheck='$datum'
WHERE id = '$id'") or die('Fehler beim Update der Datenbank: '.mysql_error());
// RESET Variablen
$page = '';
} while ($row_allLinkCheck = mysql_fetch_assoc($result)) ;
// Ende do while
echo microtime(true)-$start1.' Sekunden verbraucht <br />';
mysql_free_result($result);
?>