Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сбор всех ссылок сайта
Форумы портала PHP.SU » » Если скрипт не работает » Сбор всех ссылок сайта

Страниц (1): [1]
 

1. eter4 - 02 Марта, 2013 - 15:14:03 - перейти к сообщению
Задача скрипта собрать все ссылки с сайта, но не знаю почему не получается.
Ошибок скрипт не выводит.
Вот сам скрипт..
PHP:
скопировать код в буфер обмена
  1. class links{
  2. //полученный url
  3. public $_url;
  4. //все ссылки сайта
  5. public $_all_links = array();
  6. //url главной страницы
  7. public $_second_url;
  8.  
  9. public function __construct($url){
  10.         $this->_url = $url;
  11.         $url = parse_url($url);
  12.         $this->_second_url = $url['scheme'] . '://' . $url['host'] . '/';
  13.         unset($url);
  14. }
  15.  
  16. public function getAllLinksFromPage($html){//выбираем все ссылки со страницы
  17.        
  18.         preg_match_all("#(http|https|ftp):\/\/(.*)\.(.*?)\/(.*?)?(.*?)#",$html,$links);
  19.         $cnt = count($links[1]);
  20.        
  21.         $url = parse_url($this->_second_url);
  22.        
  23.         for ($i=0; $i<$cnt; $i++) {
  24.                
  25.                 $link = parse_url($links[1][$i]);
  26.                
  27.                 if(!preg_math('#(http|https|ftp):\/\/(.*?)#',$links[1][$i])){
  28.                         if($link['host'] == $url['host'] or isset($link['host'])){
  29.                                 //преобразуем из /index.php...
  30.                                 //в http://...
  31.                                 $links[1][$i] = str_replace($this->_second_url, '', $links[1][$i]);
  32.                                 $links[1][$i] = str_replace('/', '', $links[1][$i]);
  33.                                 $links[1][$i] = str_replace('www.', '', $links[1][$i]);
  34.                                 $links[1][$i] = $this->_second_url . $links[1][$i];
  35.                         }
  36.                 }
  37.         }
  38.         return $links;//многомерный массив
  39. }
  40.  
  41. public function deleteQueryAfterEquals($url){//удаление значения после знака "="
  42.                
  43.         $links = parse_url($url);
  44.         $link = $links['scheme'] . '://' . $links['host'] . $links['path'];
  45.         if(isset($links['query'])){
  46.                 $link .= '?';
  47.                 $querys = explode('&', $links['query']);
  48.                 $cnt = count($querys);
  49.                 for($i=0;$i<$cnt;$i++){
  50.                         $querys[$i] = preg_replace('#=.*#','',$querys[$i]);//удаляем все после "="
  51.                         $querys[$i] .= '=';//так как удалились и знаки "=" то возвращаем их
  52.                         $link .= $querys[$i];
  53.                 }
  54.                 return $link;//строка
  55.         }
  56. }
  57.  
  58. public function findLinks(){
  59.         if(!in_array($this->deleteQueryAfterEquals($this->_url),$this->_all_links)){//если не присутствует в массиве
  60.                 $this->_all_links[] = $this->deleteQueryAfterEquals($this->_url);
  61.         }
  62.         if(@$buffer=file_get_contents($this->_url)) {//если получили html
  63.                 $match = $this->getAllLinksFromPage($buffer);
  64.                 $cnt = count($match[1]);
  65.                 foreach($match[1] as $link) {
  66.                         $this->_all_links[$i] = getAllLinksFromPage(file_get_contents($link));
  67.                 }
  68.         }
  69.         var_dump($this->_all_links);
  70. }
  71. }

 

Powered by ExBB FM 1.0 RC1