Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][cURL] Przestaje działać po kilku petlach
Forum PHP.pl > Forum > Przedszkole
bursztyn
Witam. Skleiłem taki oto kod:
  1. <?
  2. unlink('cookie');
  3. fopen('cookie', "w");
  4.  
  5. $tresc='tresc mojego posta';
  6.  
  7. $cookie = dirname(__FILE__) .'/cookie';
  8. if (isset($_GET['login'])){
  9. $login=$_GET['login'];
  10. } else {
  11. $login='';}
  12. if (isset($_GET['haslo'])){
  13. $haslo=$_GET['haslo'];
  14. } else {
  15. $haslo='';}
  16. $ch = curl_init("http://www.adresmojegoforum.pl");
  17. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
  18. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
  19. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
  20. curl_setopt($ch, CURLOPT_POST, 1);
  21. curl_setopt($ch, CURLOPT_POSTFIELDS, "login=mojlogin&haslo=mojehaslo");
  22. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');
  23. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  24. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 9999999999);
  25. curl_setopt($ch, CURLOPT_TIMEOUT, 9999999999);
  26. curl_setopt($ch, CURLOPT_REFERER, 'http://www.adresmojegoforum.pl');
  27. echo curl_exec($ch);
  28. curl_close($ch);
  29.  
  30.  
  31.  
  32. $file = file('dane');
  33. $ile = count($file)>100?100:count($file);
  34. for ($i = 0; $i < $ile; $i++) {
  35. $ch2 = curl_init("http://www.adresmojegoforum.pl/".$file[$i]);
  36. curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie);
  37. curl_setopt($ch2, CURLOPT_COOKIEJAR, $cookie);
  38. curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
  39. curl_setopt($ch2, CURLOPT_POST, 1);
  40. curl_setopt($ch2, CURLOPT_POSTFIELDS, "pierwsze_pole=dane_do_tego_pola&drugie_pole=$tresc&submit=submit&action=napisz_post");
  41. curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
  42. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 9999999999);
  43. curl_setopt($ch, CURLOPT_TIMEOUT, 9999999999);
  44. curl_setopt($ch, CURLOPT_REFERER, 'http://www.adresmojegoforum.pl');
  45. echo curl_exec($ch2);
  46. curl_close($ch2);
  47. sleep(10);
  48. }
  49.  
  50. ?>


Na początku kasuję istniejący plik cookie i zaraz po tym tworzę nowy. Plik "dane", to plik zawierający końcówki linków do moich tematów, które są podstawiane w pętli niżej.
Problem jest następujący:
Pętla działa tylko pięć razy (pisze pięć postów w moich tematach i dalej nie chce działać). Czy macie pomysł co może być nie tak? Jak widać kombinowałem z timeout podając abstrakcyjne liczby ale to nie pomogło. Będę wdzięczny za każdą pomoc.


amii
Sprawdź w php.ini, (podklejam przykładowe wartości z mojego), po za tym wywal tego sleep-a nie wiem czy nie wlicza się do czasu wykonania (tego nei jestem pewien)
max_execution_time = 4096 ; Maximum execution time of each script, in seconds
max_input_time = 4096 ; Maximum amount of time each script may spend parsing request data
max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 1024M ; Maximum amount of memory a script may consume (16MB)
bursztyn
Sprawdziłem te dane na dwóch osobnych serwerach używając pliku info.php o zawartości:
  1. <?php phpinfo(); ?>
(mam nadzieję, że o to chodziło).
Informacje które tam znalazłem:
pierwszy serwer:
max_execution_time=30
max_input_time=60
max_input_nesting_level=64
memory_limit=64M

drugi serwer:
max_execution_time=30
max_input_time=60
max_input_nesting_level=64
memory_limit=128M

Jak widać te wartości mam sporo niższe i z tego co wyczytałem, może je zmienić tylko administrator. Możliwe, że przez te niskie wartości skrypt nie działa tak jak bym chciał? co_jest.gif
amii
Do autora spróbuj zmienić poprzez ini_set

Testowałem u siebie sleep, ustawiłem
  1. max_execution_time = 10
następnie odpaliłem taki skrypcik:
  1. ini_set('display_errors', TRUE);
  2. ini_set('display_startup_errors', TRUE);
  3. echo 'Staruje...<br>';
  4. //ini_set('max_execution_time', 4096); //modyfikuje dla skryptu
  5. echo 'Max czas wykonywania skryptu wynosi: ' .ini_get('max_execution_time'). ' sek.<br>'; //wyświetla 10 sek.
  6. sleep(15);
  7. echo 'Koncze po 15 sekundach<br>'; //wykonuje się i wyświetla


Następnie przy ustawionym na limicie na 10 sek. odpaliłem funkcję rekurencyjną wykonującą się spory czas mam tam ustawiony timer. Funcja wykonywała się do wartości < 10 sek. Natomiast po przekroczeniu tej wartości zostałem uraczony komunikatem:
Fatal error: Maximum execution time of 10 seconds exceeded in /home/piotr/public_html/check.php on line 184
WNIOSEK: sleep nie ma wpływu na max_execution_time, co jednak w przypadku skryptu autora może nie mieć znaczenia gdyż taki skrypt w pętli może się też wykonywać > 30 sek.
bursztyn
Na samym początku skryptu, zaraz po <? wpisałem:
  1. ini_set('display_errors', TRUE);
  2. ini_set('display_startup_errors', TRUE);
  3. ini_set('max_execution_time', 4096); //modyfikuje dla skryptu
  4. echo 'Staruje...<br>';
  5. echo 'Max czas wykonywania skryptu wynosi: ' .ini_get('max_execution_time'). ' sek.<br>'; //wyświetla 10 sek.

Skrypt niestety działa tak jak działał, jednak raz wykonuje 5, raz 7, raz 9 pętli. Być może nie zrozumiałem co miałem w kodzie zmienić, bo nie wyświetlają mi się żadne informacje, ani nawet"Startuje..." Program ma wykonywać ponad 60 pętli, po każdej 30 sekund przerwy a czy to w ogóle jest wykonalne? Może lepiej podzielić kod na kilka plików i odpalać każdy po kolei?


EDYTUJĘ:
Informacja się pojawiała, ale strona przeładowywała się i dla tego nie widziałem jej. Pojawia się:
Staruje...
Max czas wykonywania skryptu wynosi: 30 sek.
Czyli nie udało się zmienić tej wartości. Jakakolwiek pomoc?

nikt? nic?

?
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.