2016-03-26 11 views
1

Ich erstelle ein Skript, das alle Links von einer Website erhält und überprüft jeden Link, wenn es kaputt ist. Mein Problem ist, dass ich alle Links anzeigen muss, aber ich muss nur die eindeutigen Links überprüfen, nicht das Duplikat. Zum Beispiel, wenn eine Website 4 Links zu google.com hat, dann möchte ich nur einmal, nicht vier Mal überprüfen.PHP DOM Holen Sie sich alle einen Verweis von der Seite und entfernen Sie die Duplikate

Dieser Code ist funktioniert, aber ich muss es den http-Status nur einmal für doppelte Links überprüfen.

Ich habe keine Idee, wie dies zu tun ist und auch wenn es möglich ist, so etwas zu tun.

+1

Machen Sie ein Array und überprüfen Sie jedes Mal vor dem Überprüfen des Status, ob der Link bereits im Array ist, wenn nicht Link überprüfen und Array zu verknüpfen, wenn es Link überspringen gibt. –

+0

Können Sie mir einen Beispielcode zeigen? Ich bin wirklich hier geblieben. –

Antwort

0

Sie können ein Array erstellen, mit dem Sie alle bereits geprüften Links darin speichern können. Sie werden immer überprüfen, bevor Sie den Status überprüfen, ob sich die Verbindung bereits im Array befindet oder nicht. Wenn ja, überspringen Sie den Link. Wenn nicht, überprüfen Sie den Status und fügen Sie einen Link zum Array hinzu. Sie können ein Element überspringen, indem Sie das Schlüsselwort continue verwenden.

$links = array(); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    $info = $node->getAttribute('href'); 

    if(!isset($links[$info])) { 
     ///The function that checks for broken links working. 
     $check_url_status = check_url($info); 
     $links[$info] = $check_url_status; 
    } else { 
     $check_url_status = $links[$info]; 
    } 

    if ($check_url_status == '404') { 
     $badresult = 'Not working'; 
    } else { 
     $badresult = 'Working'; 
    } 

    $showlist .= '<li>The '.$info.' is '.$badresult.'</li>'; 
} 

echo '<ul>'.$showlist.'</ul>'; 
+0

Sorry funktioniert eigentlich nicht für das, was ich brauche, weil es auch alle Links ersetzt. Ich muss so etwas sein: 'Das google.com arbeitet, das google.com arbeitet, das google.com arbeitet' aber, um only mal das google.com zu überprüfen und es 3 Mal anzuzeigen, wenn der Link 3 ist mal auf der Seite. –

+0

OK jetzt perfekt, danke. –

0
$newArray  = array(); 
foreach($dom->getElementsByTagName('a') as $node) { 
    $info    = $node->getAttribute('href'); 
    if(!in_array($info, $newArray)) { 
     $newArray[]   = $info; 
     $check_url_status = check_url($info); 
     $badresult   = ($check_url_status == '404') ? 'Not working' : "Working" 
     $showlist .= '<li>The '.$info.' is '.$badresult.'</li>'; 
    } 
} 

ein Array initiieren kann, und die Werte in sie drücken, wann immer er in den Zustand eintritt, der if the hrefValue is not available into the array bedeutet.

+0

Vielen Dank, Ihr Code funktioniert auch perfekt. –

+0

yup, Sie sind immer willkommen @GeorgeGeorge – ameenulla0007

Verwandte Themen