Jednym zdaniem nie umiem wczytać tabeli który on generuje.
Oto kod:
// usage: $table = spTibExperience::getExperienceTable(array('Antica', 'Pacera')); // if any element in $table has less than 300 entries then there was a pretty serious failure (since it automatically retries) class spTibExperience { const PAGES = 11; const PERPAGE = 25; const MAXTIME = 18000; // keep trying for 5 hours, enough time for maintenance/update/etc. to run, in theory.. const TIMEOUT = 30; // seconds const MAXBACKOFF = 600; // maximum "backoff" in case of failure $failcnt = 0; do { if (!function_exists('curl_multi_init')) { return false; } foreach ($worlds as $world) { $mh = curl_multi_init(); for ($page = 0; $page <= self::PAGES; $page++) { continue; $chs[$page] = curl_init(); curl_setopt($chs[$page], CURLOPT_URL, $url = sprintf('http://www.tibia.com/community/?subtopic=highscores&world=%s&list=%s&page=%d', $world, 'experience', $page)); curl_setopt($chs[$page], CURLOPT_RETURNTRANSFER, true); curl_setopt($chs[$page], CURLOPT_FRESH_CONNECT, true); curl_setopt($chs[$page], CURLOPT_TIMEOUT, self::TIMEOUT); curl_multi_add_handle($mh, $chs[$page]); } do { $mrc = curl_multi_exec($mh, $active); } while ($active); for ($page = 0; $page <= self::PAGES; $page++) { continue; $out = curl_multi_getcontent($chs[$page]); curl_close($chs[$page]); $failure = false; if (preg_match_all('#<TD WIDTH=10%>(.*?)</TD>.*?subtopic=characters&name=.*?">(.*?)</A></TD><TD WIDTH=15%>(.*?)</TD><TD WIDTH=20%>(.*?)</TD></TR>#s', $out, $m)) { $failure = true; } /* else if (rand(1, 2) == 1) { if (@$GLOBALS['debug']) { error_log("failing because i can"); } $failure = true; } */ else { foreach ($m[2] as $k => $name) { $rank = $m[1][$k]; $level = $m[3][$k]; $xp = $m[4][$k]; } $output[$world][$page] = true; } } else { $failure = true; } if ($failure) { if ($now_t - $start_t >= self::MAXTIME) $output[$world][$page] = true; } } curl_multi_close($mh); $failures[$world] = true; else { } } $failcnt++; // don't want pow(2, ...) to get too big! if (pow(2, $failcnt) > self::MAXBACKOFF) $failcnt--; if (@$GLOBALS['debug']) { error_log("backing off for $backoff seconds. will keep trying for " . (self::MAXTIME - ($now_t - $start_t)) . " seconds"); } } else { foreach ($table as $world => $ranks) break; } } while (1); return $table; } }
Wiem, że na pączątku pisze:
// usage: $table = spTibExperience::getExperienceTable(array('Antica', 'Pacera'));
lecz po wielu próbach np:
<?php require("spTibExperience.php"); foreach ( $table as $tables => $ilosc ) { { } } ?>
<?php require("spTibExperience.php"); } ?>
Tylko ostani kod zwraca:
Cytat
bool(false)
0
0
Jeśli jest w stanie mi ktoś pomóc będę bardzo wdzięczny. ; )
btw. Kod powinien być ok. Przynajmniej rok temu na pewno działał, a strona z której skrypt pobiera dane jest taka sama.