Otóż napisałem skrypt aktualizujący czasy danego użytkownika na danej trasie. Aby zoptymalizować działanie skryptu listę tras umieściłem w tablicy przez co nie muszę w cronie wpisywać adresów typu mojastrona.pl/update.php?trasa=2 itd (tras jest ponad 90 więc do dwóch serwerów było już trochę męczarni).
Więc mam sobie tablicę z której pobierane są id tras, następnie id trasy przypisywane jest do adresu z którego otrzymuję xml-a, którego nastepnie pobieram CURL-em i dodaję/aktualizuję w bazie. Oczywiście wszystko jest w pętli.
Skrypt wykonuje się dosyć długo więc nie wiem czy jest to dobra metoda i czy ewentualnie nie popełniłem jakichś błędów.
Lecz to zostawiam jak naraie na później, głównie chodzi mi o to co musiałbym zastosować aby:
1. Dodać odnośnik do aktualizacji (dla użytkowników) tak aby nie mogli podejrzeć adresu (skrypt miałby się wykonywać w tle) - obecnie korzystam z niewidocznego iframe lecz myślę, że nie jest to zbyt bezpieczna i dobra metoda. Myślałem o tym aby wykonać to w javie lecz nie wiem nawet czego mam szukać.
2. Chciałbym aby po kliknięciu przez użytkownika w odnośnik Aktualizuj pokazywała się informacja za jaki czas aktualizacja zostanie ukończona, coś takiego jak na tej stronie: http://nfsc-s.com/nfsw/MANIEK2512PL po kliknięciu w przycisk UPDATE.
Nie chodzi mi tu koniecznie o gotowe rozwiązania, a o np. linki do manuala lub napisanie czego mam szukać, co miałbym do tego wykorzystać.
Skrypt do aktualizacji dla singleplayer wygląda tak:
<? //optional comment out or delete $tablica[] = array(299, 10, 302, 25, 71, 22, 26, 3, 57, 18, 360, 9, 72, 5, 317, 27, 41, 78, 34, 21, 24, 298, 43, 6, 39, 303, 307, 61, 56, 157, 82, 12, 83, 31, 17, 32, 33, 8, 308, 80, 120, 145, 52, 146, 79, 81, 314, 19, 292, 50, 76, 295, 7, 47, 55, 23, 309, 97, 28, 29, 38, 36, 37, 15, 49, 98, 77, 51, 289, 54, 16, 20, 35, 53, 13, 14, 30, 287, 131, 290, 11, 305, 45, 85, 147, 296, 509, 510, 517, 502, 516, 515, 501, 521); foreach ( $tablica as $pozycja => $gracz ) { { // The POST URL and parameters $tryb = '2'; $sql_host = '********'; $sql_user = '*********'; $sql_password = '**********'; $sql_baza = '**********'; if ($zapytanie) { $rezultat = ''; // inicjalizujemy zmienna if ($rezultat != '') { // rezultat NIE jest pusty, wiec dodajemy przecinek i spacje $rezultat .= ','; // to jest to samo co: $rezultat = $rezultat . ', '; } $rezultat .= $wynik["nick"]; } } else { } } $request = 'http://world.needforspeed.com/SpeedAPI/ws/game/1/nfsw/leaderboards?et='.$tryb.'&eid='.$gracz[$i].'<=1&dn='.$rezultat.'&shard=CHICANE'; // POST the curl session object $session = curl_init($request); // Set the POST options. curl_setopt ($session, CURLOPT_POST, true); curl_setopt ($session, CURLOPT_POSTFIELDS, $request); curl_setopt($session, CURLOPT_HEADER, true); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Do the POST and then close the session $response = curl_exec($session); curl_close($session); // POST HTTP Status code from the response // Check for errors switch( $status_code[0] ) { case 200: // Success break; case 503: break; case 403: break; case 409: die('<font color="white"> Nie można pobrać danych z serwerów EA. Prawdopodobnie serwery są wyłączone.</font> '); break; case 400: // You may want to fall through here and read the specific XML error die('Bad request. The parameters passed to the service did not match as expected. The exact error is returned in the XML response.'); break; default: } // POST the XML from the response, bypassing the header $xml = null; } // Output the XML $worldLeaderboard = simplexml_load_string($xml); foreach($worldLeaderboard as $linia) { $search = array('CAR_MDL_','CAR1002', 'CAR1004', 'CAR1006', 'CAR1008', 'CAR1010', 'CAR1012', 'CAR1014', 'CAR1016', 'CAR1018', 'CAR1020', 'CAR1022', 'CAR1024', 'CAR1026', 'CAR1028', 'CAR1030', 'CAR1032', 'CAR1034', 'CAR1036', 'CAR1038', 'CAR1040', 'CAR1044', 'CAR1046', 'CAR1048', 'CAR1050', 'CAR1054'); $replace = array('','911 GT3 RS 4.0', 'ZONDA CINQUE', 'Reventon', 'F1 ELITE', 'SKYLINE GT-R NISMO', 'ECLIPSE GS-T', 'R8 LMS ULTRA', 'B2', 'MP4-12C HALLOWEEN', 'F-150 RAPTOR', 'ESCORT MK1 RS1600', 'RABBIT SUV', 'RX-7 FC3S', 'H1 SNOWFLAKE 3.0', 'CCXR EDITION', 'COBALT SS', 'AVENTADOR', 'MONARO', 'AGERA', '914', 'POLICE INTERCEPTOR', 'CAPRi', 'COBRA 427', 'A3 3.2', 'H1'); $subject = ''.$linia['carName'].''; $subject1 = ''.$linia['make'].''; $zapytanie = "INSERT INTO `single$gracz[$i]` (`nick`, `marka`, `model`, `czas`) VALUES ('{$linia['personaName']}', '$carMake', '$carName', '{$linia['eventDuration']}')"; $zapytanie2 = "UPDATE `single$gracz[$i]` SET `marka` = '$carMake', `model` = '$carName', `czas` = '{$linia['eventDuration']}' WHERE `nick`='{$linia['personaName']}'"; } } } ?>
Jeśli była by taka mozliwość prosiłbym o sprawdzenie poprawności kodu, zdaję sobię sprawę, że może w nim być sporo błędów. Można by go było zoptymalizować i zabezpieczyć lecz jak narazie nie wiem jak.
Skrypt działa poprawnie czyli dodaje/aktualizuje dane lecz jeśli mona go jakoś zabezpieczyć/ zoptymalizować prosiłbym o jakie kolwiek podpowiedzi

z góry dziękuję
jeśli czegoś nie zroumiesz- pisz postaram się to lepiej wytłumaczyć