Domanda

Sto scrivendo un cingolato base che memorizza nella cache le pagine semplicemente con PHP.

Tutto ciò che fa è uso get_file_contents per ottenere contenuti di una pagina web e regex per ottenere tutti i link fuori <a href="URL">DESCRIPTION</a> - nel momento in cui ritorna:

Array {
[url] => URL
[desc] => DESCRIPTION
}

Il problema che sto avendo è capire la logica dietro determinare se il link alla pagina è locale o sussing se si può essere in una directory locale completamente diverso.

Potrebbe essere un qualsiasi numero di combinazioni:. Vale a dire href="../folder/folder2/blah/page.html" o href="google.com" o href="page.html" - le possibilità sono infinite

Quale sarebbe l'algoritmo corretto per avvicinarsi a questo? Io non voglio perdere tutti i dati che potrebbero essere importanti.

È stato utile?

Soluzione

Prima di tutto, regex e HTML non mescolare. Usa:

foreach(DOMDocument::loadHTML($source)->getElementsByTagName('a') as $a)
{
  $a->getAttribute('href');
}

Link che possono andare fuori del vostro sito iniziare con protocollo o //, cioè.

http://example.com
//example.com/

href="google.com" è collegamento a un file locale.

Ma se si vuole creare una copia statica di un sito, perché non basta usare wget?

Altri suggerimenti

Consideriamo prima le proprietà di collegamenti locali.

Questi saranno essere:

  • relativa senza schema e non host o
  • assoluto con uno schema di 'http' o 'https' ed un host che corrisponde alla macchina da cui il script è in esecuzione

Questo è tutto la logica avresti bisogno di identificare se un link è locale.

Utilizzare la parse_url per separare i diversi componenti di un URL identificare il schema e host .

Si dovrebbe cercare http: // nel href. Altrimenti, è possibile determinare se inizia con ./ o qualsiasi combinazione di "./". Se non si trova un "/", allora si dovrebbe presumere che la sua un file. Vuoi uno script per questo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top