Mam taki problem do rozwiązania i proszę o pomoc.
Posiadam duży plik z produktami, około 80 tysięcy produktów. Wszystkie muszę wrzucać do sklepu internetowego. Jest to oczywiście uruchamiane cronem raz dziennie, po optymalizacjach kodu udało się doprowadzić do momentu gdzie cały plik jest przerobiony w około 10 godzin. Wszystko działa przez webapi sklepu (SOAP).
Jednak codziennie po około 15000 produktów przerobionych występuje jakiś błąd i skrypt jest przerywany, w tej chwili muszę go uruchamiać ręcznie aby kontynuował pracę i wciąż nie mam gwarancji, że skończy swoją pracę z plikiem do końca.
Sprawa pliku danych jest rozwiązana w taki sposób, że są z niego wybierane paczki produktów np. po 500 sztuk i wrzucane do nowego pliku, na którym będzie pracował skrypt. Cały plik danych jest odchudzany o te 500 produktów i tak skrypt pracuje aż do momentu skończenia się pliku z danymi.
Napisane w pętli while(file_exists()) {...
Może to już jest głupie rozwiązanie i ktoś zna lepsze, proszę pisać.
Natomiast wracając do sedna problemu, skrypt przerywają błędy np. "Internal server error" lub "looks like we got no xml document", szczerze mówiąc to nie znam ich przyczyn ponieważ sklep cały czas działa normalnie.
Myślałem, aby przechwytując SoapFault pobierać lastRequest i wykonywać natychmiast to samo żądanie po błędzie, czy to jest dobry pomysł? W tej chwili jeśli złapię SoapFault to jest on wrzucony do logów a po nim zwykły die();
Kwestia limitu połączeń chyba rozwiązałem jak i pamięci RAM, limit wykonywania się skryptu php jest nieograniczony, SoapClienta tworzę z parametrami array("trace" => true, "connection_timeout" => 5)) memory_limit jest bezpieczny.
Myślałem, też aby uruchamiać taki cron częściej wtedy mógłby pracować na mniejszej części danych z pliku i nawet gdyby zaciął się to po nim uruchomiłby się następny jednak to też niesie ze sobą kilka problemów.
Proszę o pomoc bardziej doświadczonych.