![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich
![]() 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 ![]() 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 ![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
nie pchaj całej bazy do zmiennych
wrzuć sobie wszystko w tą pętle z linii 27 czyli w w uproszczeniu
pisane z palca i nie analizowałem dokładnie twojego kodu więc mogą być błędy ---- edit: co to za potworek if(isset($reference) == $productid2) isset daje w wyniku boolean, a $productid2 zawiera int więc takie porównanie większego sensu niema Ten post edytował sazian 6.05.2014, 19:32:23 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
dzieki za rade jednak nie moge wykorzystac tej petelki poniewaz plik xml nie zawiera wszystkich importowanych produktów (w pliku xml hurtowni jeśli produkt jest niedostepny (0 stan) jest usuwany), dlatego muszę dokonac sprawdzenia na podstawie numerów ID (tabela: reference) już zapisanych w bazie danych.
Na razie rozwiazałem to właśnie przy pomocy array_search() dzięki której wyszukuje czy dany numer ID produktu jest w pliku XML (tablica utworzona w petli linia 27) i bazie danych ten 'potworek' tworzący warunek choc sensu nie ma dzięki niemu jakoś to działa wmiarę poprawnie ![]() może masz jakiś pomysł jak ominąć tworzenie tablicy z pliku xml i dopiero w petli while dokonac sprawdzenia czy dany numer ID istnieje właśnie w pliku xml pomijając array_serach()? |
|
|
![]()
Post
#4
|
|
![]() 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
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
+plusik dla każdego za dobre chęci i rady
![]() Udało mi się to dopracowac (tak przynajmniej mysle) nie jest idealnie poniewaz wykorzystałem petelke for aby robiła się ograniczona ilosc produktów a nastepnie GETem pobierało na czym się zakończył poprzedni proces ale działa. Ale przez to za każdym nowym wywołaniem skryptu musi on tworzyć od nowa całą tablice z pliku xml i kontynuować od wyznaczonego miejsca (wykorzystałem XMLreader ale czy poprawnie?). Jeszcze mam takie pytanie: Czy jakbym chciał ten skrypt wrzucic do CRONa aby robił się automatycznie to nie bedzie problemu z takim przekazywaniem zmiennych GETem?
jako że nigdy nie korzystałem z CRONa to niestety nie wiem i prosiłbym tylko o jeszcze taką drobną podpowiedz ![]() Kodzik dla zainteresowanych:
----- EDIT Ok trochę poszperałem i już wiem że głupie pytanie zadałem bo przecież oczywiste ze meta i headers jest dla przegladarki i CRON to pominie :/ Jednak jakby ktoś mógł mi pokazać jak zamienić ten meta tag i GET na CURL byłbym ogromnie wdzięczny, ponieważ gdzieś wynalazłem iż tym da rade wykonać to co stworzyłem jako zadanie crona Pozdrawiam Ten post edytował tom3k21 7.05.2014, 11:07:14 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 08:56 |