![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam skrypt, ktory wykorzystuje rekurencje i czasem wywala taki blad na konsoli: "Naruszenie zasad ochrony pamieci". Ktos wie w czym moze tkwic problem albo jak to mozna sprawdzic? i druga kwestia czy jest jakies rozwiazanie, ktore jesli dzialanie skryptu zostaje przerwane wywoluje inna funkcje/plik ? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
rekurencja ma to do siebie, ze zjada duzo pamieci. Jak sie twoja rekurencja dlugo nie konczy to taki jest efekt
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
hmmm czyli jakie rozwiazania mozna zastosowac zeby tego uniknac?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
unikac rekurencji jak ognia. A jak sie nie da, to tak ją pisac by bylo optymalnie.
No ale wrozką nie jestem - pokaz kod i co on ma robic. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
a mozna jakos sprawdzic ile pamieci juz rekurencja pozarla, i np przerwac wykonywanie skryptu zanim zezre wszystko co dostepne i np zwolnic pamiec i uruchomic skrypt od nowa ? (wtedy i tak bedzie kontynuuowal od momentu przerwania bo to operacje na bazie danych );
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat wtedy i tak bedzie kontynuuowal od momentu przerwania bo to operacje na bazie danych Skoro jestes w stanie kontynuowac, to po co ci ta rekurencja tam? POkaz kod to ci poprawimy ![]()
Powód edycji: [nospor]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
to jest taki spider/crawler do np robienia sitemap'y, zrobilem to z wykorzystaniem mysql:
function crawl($domain) { //select url not crawled yet $sql = "SELECT * FROM tmpUrlCrawled WHERE visited IS NULL LIMIT 1"; $result = mysql_query($sql) or die (mysql_error()."<br>Query: $sql"); if(mysql_num_rows($result)>0) { $url = mysql_result($result,0,"url"); $url = mysql_real_escape_string($url); //update url which was crawled $sql = "UPDATE tmpUrlCrawled set visited = 'y' WHERE url = '$url'"; $result = mysql_query($sql) or die (mysql_error()."<br>Query: $sql"); //crawl links if(preg_match("/^http[s]?:\/\/[^\/]*".str_replace('.', '\.', $domain)."/i", $url)) { $tmpLinks = getUrls($url); $tmpLinks = array_unique($tmpLinks); } //add crawled links to DB if($tmpLinks) foreach ($tmpLinks as $tmpLink) { $tmpLink = mysql_real_escape_string($tmpLink); $sql = "INSERT IGNORE INTO tmpUrlCrawled set url = '$tmpLink'"; $result = mysql_query($sql) or die (mysql_error()."<br>Query: $sql"); } //rekurencja crawl($domain); } }
Powód edycji: [thek]: Proszę oBBCode, bo czyta się to źle każdemu...
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Tutaj rekurencja? Ty chyba zgłupiałeś...
![]() Do sitemapy Twojej własnej strony wystarcza znajomość jej struktury. Pewne linki masz stałe i możesz je na pałę wpisać do kodu. To co z bazy to zwykłe pętle while i banalne zapytania: Tak się to robi, choć ja mocno okroiłem, ale żadne crawlery bo to mocno niewydajne i jedzie zarówno po serwisie, jak i po bazie. Nawet mocno rozbudowane serwisy się tak robi. Tyle, że wtedy robi kilka plików sitemap, nie zaś jeden duży. Ludzie myślcie trochę chociaż... -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 23:20 |