Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Spider na własną stronę.
Forum PHP.pl > Forum > Przedszkole
Mike122
Potrzebuję stworzyć sobie "bota" który znajdzie wszystkie strony tylko w moim serwisie.
Więc po przeczytaniu paru różnych tematów na forach stworzyłem kod który znajduje linki i wyświetla je.
jednak posiadam pewien problem jak zrobić aby nie wyświetlał 4 czy 6 razy tych samych linków.
Chodzi mi żeby był raz 1 link.

  1. <?php
  2. $url = "index.html";
  3. $link = implode('', file($url));
  4. if(preg_match_all('/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $link, $sub)){
  5. foreach($sub[2] as $value){
  6. if (!eregi('http://', $value)) {
  7. $link = implode('', file($value));
  8. if(preg_match_all('/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $link, $sub)){
  9. foreach($sub[2] as $value){
  10. if (!eregi('http://', $value)){
  11. echo ($value);
  12. echo ("<br />");
  13. }
  14. }
  15. }
  16. }
  17. }
  18. }
  19. }
  20. ?>

Uwagi i propozycje do do zamiany jakiś funkcji mile widziane. Pozdrawiam i proszę o pomoc.
UDAT
Zbieraj linki np. do tablicy, a potem sprawdzaj czy już ten link już został dodany, np. przez in_array" title="Zobacz w manualu PHP" target="_manual
kornel-php
Może twórz sobie tablice z linkami, które już 'znalazłeś' i sprawdzaj, czy każdy kolejny znaleziony już czasem do niej nie należy...

Ewentualnie możesz sobie tworzyć baze danych ze znalezionymi i tam sprawdzać czy już istnieje...


Jednak druga opcja jest bezsensowna i lepiej dodawać linki do tablicy.

---
kolega UDAT mnie wyprzedził winksmiley.jpg
Mike122
Zrobiłem tak jak radziliście i nic już nie wyświetla tiredsmiley.gif
  1. <?php
  2. $web = "index.html";
  3. $web = implode('', file($web));
  4. if(preg_match_all('/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $web, $sub)){
  5. foreach($sub[2] as $url){
  6. if(!eregi("http://", $url)){
  7. if(!in_array($url, $sub[2])){
  8. $web = implode('', file($url));
  9. if(preg_match_all('/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $web, $sub)){
  10. foreach($sub[2] as $url){
  11. if (!eregi("http://", $url)){
  12. if(!in_array($url, $sub[2])){
  13. echo ($url);
  14. echo ("<br />");
  15. }
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }
  23. ?>


Po zabraniu znaku !
  1. <?php
  2. if(!in_array($url, $sub[2])){
  3. echo ($url);
  4. echo ("<br />");
  5. }
  6. ?>

Wyświetla tak jak przedtem wszytko. sadsmiley02.gif
UDAT
Co ty zrobiłeś??

Dajesz na początku $links = array ( );
a zamiast wypisywania dajesz:
  1. <?php
  2. if ( ! in_array ( $link, $links ) ) {
  3. $links []= $link;
  4. echo $link;
  5. }
  6. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.