Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt w CRON i przeglądarce
arpi
post 6.04.2023, 22:31:51
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 7.01.2011

Ostrzeżenie: (10%)
X----


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.  
Go to the top of the page
+Quote Post
Tomplus
post 7.04.2023, 05:17:41
Post #2





Grupa: Zarejestrowani
Postów: 1 838
Pomógł: 226
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Robertus
post 16.04.2023, 10:57:16
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 22.02.2022

Ostrzeżenie: (10%)
X----


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.

Ten post edytował Robertus 16.04.2023, 10:58:02
Go to the top of the page
+Quote Post
arpi
post 17.04.2023, 07:18:33
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 7.01.2011

Ostrzeżenie: (10%)
X----


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.

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 21:04