Ich habe ein Skript geschrieben, das auf einer Webseite alle Hyperlinks einsammelt. Leider ist die Perfomance noch nicht gut genug und das Skript beendet sich nach 5 Minuten. Hat jemand eine Idee, wie man diesen Algorithmus verbessern kann?
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Sucker</title>
<style type="text/css">
*,body{
font-family:"Courier New", Courier, monospace;
font-size:12px;
}
</style>
</head>
<body>
<pre>
<?php
global $linkpuffer;
function suche_komplett_www($url){
//Seite einlesen
$zeile=@file_get_contents($url);
// Pattern für Hyperlinks
$pattern = '=^(.*)<a(.*)href\="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
//solange ein Hyperlink noch gefunden wird, lesen
while (preg_match($pattern, $zeile, $txt)){
//txt[3] ist der Hyperlink
if(preg_match("/http:/",$txt[3])){
}elseif(preg_match("/Javascript:/i",$txt[3])){
}elseif(preg_match("/.pdf/i",$txt[3])){
}else{
$variable = $txt[3];
if(substr($variable,0,2)=="./"){
//echo $variable." (mit ./)<br>";
// nun den Punkt (.) am Anfang loeschen
$variable = substr($variable,1,strlen($variable)-1);
$in_puffer=$url.$variable;
//echo $variable." (./ entfernen)<br>";
echo $variable."<br>";
if(@array_search($variable,$linkpuffer)!=true){
$linkpuffer[] = $variable;
suche_komplett_www($in_puffer);
}
}elseif(substr($variable,0,1)=="/"){
//echo $variable." (mit /)<br>";
$in_puffer=$url.$variable;
//echo $variable." (/ entfernen)<br>";
echo $variable."<br>";
//wenn Wert noch nicht im Array, dann einfügen
if(@array_search($variable,$linkpuffer)!=true){
$linkpuffer[] = $variable;
suche_komplett_www($in_puffer);
}
}else{
$variable="/".$variable;
$in_puffer=$url."/".$variable;
echo $variable."<br>";
if(@array_search($variable,$linkpuffer)!=true){
$linkpuffer[] = $variable;
suche_komplett_www($in_puffer);
}
}
}
$zeile = $txt[1]." hier war mal ein Link ".$txt[6];
}
return $linkpuffer;
}
$linkpuffer=suche_komplett_www("http://www.tech-island.com/technet/techtalk/rekursiv_programmieren");
echo "<hr>";
echo "<pre>";
print_r($linkpuffer);
echo "</pre>";
?>
</pre>
</body>
</html>