
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).
<?php //error_reporting(E_ALL); include 'import_config.php'; include 'import_functions.php'; ?> <body> <div id="information"></div> <?php $xmlfile = 'import/plik.xml'; if($xml = simplexml_load_file($xmlfile)){ } else { exit; } foreach($xml->offers->offer as $entry) { $productid[] = $entry->id; $instock[] = $entry->instock; } else { $instock[] = '0'; } } $row2[] = $row; } $niezmienione = $nieaktywne = $zaktualizowane = 0; for($i = 0; $i <= $total; $i++){ $reference = $row2[$i]['reference']; $id_produktu = mysql_result(mysql_query("SELECT id_product FROM ps_product WHERE reference = '".$reference."'"), 0); @mysql_query("UPDATE ps_stock_available SET `quantity` = '".$stock2."' WHERE `id_product` = '".$id_produktu."'"); if( $stock2 > 0){ $active = 1; } else { $active = 0; } @mysql_query("UPDATE ps_product_shop SET `active` = '".$active."' WHERE `id_product` = '".$id_produktu."'"); $zaktualizowane++; //echo $row2[$i]['reference']. ' znaleziony ze stanem magazynowym '. $stock2 .'<br>'; } else { $instock2 = '0'; if((int)$reference){ @mysql_query("UPDATE ps_stock_available SET `quantity` = '".$instock2."' WHERE `id_product` = '".$id_produktu."'"); @mysql_query("UPDATE ps_product_shop SET `active` = '".$instock2."' WHERE `id_product` = '".$id_produktu."'"); $nieaktywne++; //echo $row2[$i]['reference']. ' <span style="color:red">nie znaleziony! Zmieniono stan magazynowy na '. $instock2 .'</span><br>'; } else { $niezmienione++; //echo $row2[$i]['reference']. ' <span style="color:green">Stan nie zmieniony</span><br>'; } } echo '<script language="javascript"> document.getElementById("information").innerHTML="'.$i.' / '.$total.'<br>Produkty zaktualizowane: '.$zaktualizowane.'<br>Produkty niezmienione: '.$niezmienione.'<br>Nieaktywne produkty: '.$nieaktywne.'"; </script>'; } echo '<script language="javascript">document.getElementById("information").innerHTML="Aktualizacja zakonczona<br>Produkty zaktualizowane: '.$zaktualizowane.'<br>Produkty niezmienione: '.$niezmienione.'<br>Nieaktywne produkty: '.$nieaktywne.'"</script>'; ?> </body>
Fragment XML:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE nokaut SYSTEM "http://www.nokaut.pl/integracja/nokaut.dtd"> -<nokaut ver="7.2" generator="Comarch ERP e-Sklep">-<offers>-<offer><id>23270</id><name>PEDAŁY DO ROWERKA JD BUG TC04G czarne </name><description> PEDAŁY DO ROWERKA JD BUG TC04G czarne Zestaw do rowerków - mechanizm do rowerków biegowych. kompatybilny z modelami Nanny i Billy. </description><price>89.41</price><weight>1.000</weight><category>Dla dzieci / Sport dla dzieci / Rowery biegowe</category><producer>Smj</producer><property name="Dostępne kolory">Czarny</property><instock>3</instock></offer></offers></nokaut>
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
