Ben sadece, bir niş tabanlı arama motoru koymak için, bir uygulama geliştiriyorum. Uygulama kapsamında bir web sitesi tarar ve sonra işlevinde açıklandığı gibi "ürünler" tablosunda sitesinden doğru veri depolamak için collectData () işlevini kullanan bir işlev gezinme () içerir var. Ziyaret edilen sayfalar bir veritabanında saklanır
Zaman Aşımı ve Bellek: paletli iki şey hariç anlatıldığı gibi, oldukça iyi çalışıyor. Ben zaman aşımı hatayı düzeltmek için idare ettik ama hafıza kalır. Ben sadece memory_limit aslında sorunu gidermekle değil artan biliyorum.
Fonksiyonu "EXAMPLE.COM / products / sürün" ziyaret ederek çalıştırılır.
Bir bellek sızıntısı bir PHP Web tarayıcısı ile kaçınılmaz mı? YA ben yanlış / yapmıyorum yapıyorum şey var.
Şimdiden teşekkürler. (AŞAĞIDAKİ KOD)
function crawl() {
$this->_crawl('http://www.example.com/','http://www.example.com');
}
/***
*
* This function finds all link in $start and collects
* data from them as well as recursively crawling them
*
* @ param $start, the webpage where the crawler starts
*
* @ param $domain, the domain in which to stay
*
***/
function _crawl($start, $domain) {
$dom = new DOMDocument();
@$dom->loadHTMLFile($start);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");//get all <a> elements
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href'); // get href value
if(!(strpos($url, 'http') !== false)) { //check for relative links
$url = $domain . '/' . $url;
}
if($this->Page->find('count', array('conditions' => array('Page.url' => $url))) < 1 && (strpos($url, $domain) !== false)) { // if this link has not already been crawled ( exists in database)
$this->Page->create();
$this->Page->set('url',$url);
$this->Page->set('indexed',date('Y-m-d H:i:s'));
$this->Page->save(); // add this url to database
$this->_collectData($url); //collect this links data
$this->_crawl($url, $domain); //crawl this link
}
}
}