![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich (IMG:style_emoticons/default/smile.gif)
Mam nadzieje że jest ktoś w stanie mi pomóc rozwiązać problem ze skryptem do aktualizacji stanów magazynowych. Otóż sklep stoi na home.pl i tutaj jest problem... (od administatorów jedyne czego się dowiedziałem to żeby przenieść na inny pakiet hostingowy (IMG:style_emoticons/default/tongue.gif) ot tak pomocni są)... a mianowicie mają ustawione limity CPU (ok rozumie) ale także max_execution_time na ok 5min którego zmienić nie można :/ ale do sedna... Moje wypociny ponizej i jako że jestem laikiem w programowaniu to nie bardzo wiem jak go zoptymalizować lub podzielić na części aby wykonywały się jedna po drugiej (np podzielic plik xml i jeden po drugim parsowac, plik zawiera około 10 000 produktów ~10mb).
Fragment XML:
pokrótce: skrypt pobiera xml przy pomocy simpleXML oraz laczy sie z baza danych gdzie wcześniej zostały zaimportowane produkty z numerem ID wpisanym do tabelki `reference` i jeśli produkt istnieje zarówno w DB jak i XML jego stan magazynowy zostaje uzupelniony odpowiednią liczbą, natomiast jeśli produkt znajduje się w bazie danych ale nie w XMLu to jego stan określa się jako 0. całość opiera się na metodzie array_search() czyli przeszukuje określonego wyrażenia w całej tablicy trzymającej numery ID produktów z XML'a. I pewnie dlatego nieraz otrzymuje komunikat CPU LIMIT jednak nie wymyśliłem jakiegoś innego sposobu aby to sprawdzać. Za każdą sugestie podpowiedź, przykład, rzut okiem na kod będę bardzo wdzięczny (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
zamiast simplexml_load_file który pakuje całego XML do pamięci zainteresuj sie XMLRead który czyta strumieniowo, dzięki temu zaoszczędzisz masę pamięci.
Kolejnym krokiem może być (o ile często robisz importy stanów) dodanie kolumny flagi. Podczas rozpoczęcia importu ustawiasz flagi na 0 dla wszystkich. Potem przy aktualizacji konkretnego stanu w bazie z XML zmieniasz stan flagi na 1 A na koniec dla każdego prod gdzie flaga === 0 robisz stock na 0 wystarczy
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 23:38 |