PHP Web paletli bağlantılar / sayfa mantığı

3 Cevap php

Ben sadece PHP ile sayfaları önbelleğe temel paletli yazıyorum.

Bütün yaptığı get_file_contents tüm bağlantıları dışarı <a href="URL">DESCRIPTION</a> almak için bir web sayfası ve regex içeriğini almak için kullanabilirsiniz - bu döner anda:

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

Ben yaşıyorum sorun sayfası bağlantı yerel olup olmadığını belirlemek ya da tamamen farklı bir yerel bir dizin olabilir olmadığını sussing arkasındaki mantığı sergiyi olduğunu.

- Olasılıklar sonsuzdur yani href="../folder/folder2/blah/page.html" veya href="google.com" veya href="page.html": Bu kombinasyon herhangi bir sayı olabilir.

Ne bu yaklaşım doğru algoritma olurdu? Ben önemli olabilecek herhangi bir veri kaybetmek istemiyorum.

3 Cevap

Her şeyden önce, regex ve HTML karışmaz. Kullanın:

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

Sitenizin dışından gidebilir Linkler protokolü ile başlamak veya //, yani

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

href="google.com" yerel bir dosyaya link.

Bir sitenin statik bir kopyasını oluşturmak istiyorsanız Ancak, neden sadece kullanmak değil, wget?

Ilk yerel bağlantıların özelliklerini ele alalım.

Bunlar ya olacak:

  • relative no scheme ve herhangi bir host, veya
  • absolute with a scheme of 'http' or 'https' and a host that matches the machine from which the script is running

Yani bir bağlantı yerel olup olmadığını belirlemek için gereken istediğiniz tüm mantık var.

parse_url function to separate out the different components of a URL to identify the scheme ve host kullanın.

Sen href http:// bakmak gerekir. Else, onunla başlarsa. Belirlemek / veya ". /" Herhangi bir kombinasyonu olabilir. Eğer bulamazsanız bir "/" o zaman onun bir dosya olduğunu varsaymak gerekir. Bunun için bir komut dosyası ister misiniz?