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

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).
<?php
//error_reporting(E_ALL);
header('Content-type: text/html; charset=utf8'); include 'import_config.php';
include 'import_functions.php';
?>
<body>
<div id="information"></div>
<?php
$xmlfile = 'import/plik.xml';
if($xml = simplexml_load_file($xmlfile)){
echo "<br>Załadowano poprawnie plik XML<br>"; } else {
echo "<br><span style='color:red'>Nie załadowano pliku XML, operacja została przerwana</span><br>"; }
$row2 = $productid = $instock = array();
foreach($xml->offers->offer as $entry)
{
$productid[] = $entry->id;
if(!empty($entry->instock)){ $instock[] = $entry->instock;
} else {
$instock[] = '0';
}
}
$query= mysql_query("SELECT `id_product`, `reference` FROM `ps_product`"); $row2[] = $row;
}
$niezmienione = $nieaktywne = $zaktualizowane = 0;
for($i = 0; $i <= $total; $i++){
$reference = $row2[$i]['reference'];
if(isset($reference) == $productid2){ $id_produktu = mysql_result(mysql_query("SELECT id_product FROM ps_product WHERE reference = '".$reference."'"), 0
); if(!empty($instock[$productid2])){$stock2 = $instock[$productid2];} else { $stock2 = 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