Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt w CRON i przeglądarce
Forum PHP.pl > Forum > PHP
arpi
Witajcie
mam skrypt który za pomocą CURL loguje sie do hurtowni a następnie w pętli przetwarza każdą stronę i wyciągam z niej potrzebne dane (ceny/ilosci produktów).
Otóż mam taki problem.
Gdy odpalam skrypt w przeglądarce to działa dobrze, wykonuje się kilka godzin (przetwarza 6000 produktów) i jest ok.
Natomiast jak uruchamia się poprzez CRON to kończy się po kilku minutach (przetwarza tylko 100-150 produktów)

Macie jakieś pomysły co może być przyczyną ?

ustawienia:
serwer mydevil
max_execution_time = 25000


na wszelki wypadek wrzucam część skryptu, może coś tu potrzeba dorzucić ?
w logach z błędami php nic nie znalazłem.

Testuje to ponad tydzień z różnymi kombinacjami i już nie mam pomysłów
  1. <?php
  2.  
  3. require('../simplehtmldom/simple_html_dom.php');
  4.  
  5.  
  6. //logowanie + zapis cookies
  7. $username = 'user';
  8. $password = 'pass';
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL, 'https://xxxxx.pl/logowanie.php');
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. curl_setopt($ch, CURLOPT_POSTFIELDS, 'login='.$username.'&haslo='.$password);
  13. curl_setopt($ch, CURLOPT_POST, 1);
  14. curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
  16. $output = curl_exec($ch);
  17. if (curl_errno($ch)) {
  18. echo 'Błąd #' . curl_errno($ch) . ': ' . curl_error($ch);
  19. }
  20. $info = curl_getinfo($ch);
  21. curl_close($ch);
  22.  
  23.  
  24. $numery_id = fopen("id.csv", "r") or exit("Blad!");
  25. while(!feof($numery_id))
  26. {
  27. $numer_id = trim(fgets($numery_id));
  28.  
  29. $file = fopen("temp.html", "w");
  30. $ch2 = curl_init();
  31. curl_setopt($ch2, CURLOPT_URL, 'https://xxxxx.pl/produkt.php?pid='.$numer_id);
  32. curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
  33. curl_setopt($ch2, CURLOPT_CUSTOMREQUEST, 'GET');
  34. curl_setopt($ch2, CURLOPT_ENCODING, 'gzip, deflate');
  35. curl_setopt($ch2, CURLOPT_COOKIEFILE, 'cookies.txt');
  36. curl_setopt($ch2, CURLOPT_FILE, $file);
  37.  
  38. $output = curl_exec($ch2);
  39. if (curl_errno($ch2)) {
  40. echo 'Błąd #' . curl_errno($ch2) . ': ' . curl_error($ch2);
  41. }
  42. $info = curl_getinfo($ch2);
  43. curl_close($ch2);
  44. fclose($file);
  45.  
  46. //pobrana strona wrzucona do biblioteki simplehtmldom celem wyjecia potrzebnych danych z drzewa DOM
  47. $html = file_get_html("temp.html");
  48. if($html){
  49. //odczyt z drzewa DOM potrzebnych danych i zapis do Mysql....
  50. }
  51.  
Tomplus
Pierwsze co to zobacz logi dla cron'a. Pewnie jest informacja o wcześniejszym zakończeniu.

Drugie, jeżeli strona hurtowni jest w twoim zasięgu, lub jeżeli jest to strona firmy którą współpracujecie biznesowo, to może warto użyć jakieś proste API do pobierania danych?
Robertus
A jak odpalasz to cronem?
Lokalnie przez komendę typu: /usr/bin/php /sciezka/plik.php
Czy np. curlem przez domenę: curl https://jakasstrona.pl/plik.php

W pierwszym przypadku ten php może używać zupełnie inne ustawienia php.ini niż odpalanie przez stronę w przeglądarce i dlatego ci się wykonuje np. przez domyślne 30 lub 60 sekund.
arpi
odpalam wg pierwszej metody /usr/bin/php /sciezka/plik.php

wczoraj potestowałem jeszcze inne kombinacje i jak na razie działa.
Otóż ten CURL z logowaniem co jest na poczatku skryptu wsadziłem do pętli aby się logował co 100 przetworzonych produktów.

coś z tymi cookies-ami było nie tak.

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.