Cytat(duch4ever @ 26.11.2012, 15:09:46 )

Witam, mam spory plik z hurtowni (prawie 40MB) i chcę go zaimportować przez PHP do bazy danych. Napisałem sobie skrypt który przez ajax stopniowo dodaje/aktulizuje dane ($xml->read()) jednak nie jest to dość optymalne i działa kilka godzin (skrypt otwiera plik, zczytuje część danych i zamyka).
nie opisałeś jak to robisz, samo xml->read() nic nie mówi ;p
Cytat(duch4ever @ 26.11.2012, 15:09:46 )

Można to zrobić jakoś lepiej? Może jest jakiś sposób o którym nie wiem?
Pliku oczywiśćie nie moge zczytać w całości gdyż skrypt musi działać na wirtualnym serwerze przy 128MB pamięci dla PHP.
Jasne, że można i można to zrobić przy mniej dostępnej pamięci ;p
do google hasło "SAX PHP" - będziesz miał też odwołanie do manual'a PHP "XML Parser", jednak poczytaj sobie toutoriale jak z tego korzystać... całość będziesz musiał napisać zdarzeniowo w PHP podpinając callbacka pod parsera, oczywiście Tobie będzie potrzebna bardziej skomplikowana obsługa dynamicznych zdarzeń niż w przykładach, które znajdziesz w google...
w tym parserze będziesz miał info, do jakiego tagu wchodzisz, poziom zagłębienia itd... w PHP zdarzeniowo funkcje czy metody klas możesz wywoływać np. w ten sposób $this->{'moja_metoda'}($argument) oraz poczytaj o callbackach w PHP
http://www.php.net/manual/en/language.types.callable.phpdodatkowo możesz w bazie przechowywać jakiś unikalny zewnętrzny harakterystyczny klucz... dodając do bazy nie dodaj do tej tabeli tylko do tymczasowej o tej samej strukturze w transakcji rekord po rekordzie (i nie zapamiętuj tych miennych), po dodaniu wszystkich rekordów do tabeli tymczasowej wykonaj zapytanie (inserta) dodające rekordy z tabeli tymczasowej do tabeli docelowej po kluczach unikalnych zewnętrznych (harakterystycznych) których nie ma w tabeli docelowej (chyba to się nazywa iloraz na danych bazy - ale to tylko ciekawostka nazewnictwa ;p), czyli INSERT SELECT hasło...
o dodawaniu wartości do tabeli tymczasowej wspomniałem dlatego, iż ja nie byłem pewnych danych które będą dopisywane do bazy czy czasem się nie powtórzą - pewne statystyki robiłem na bazie zewnętrznych danych XML jakieś 1,5 roku temu... a ponieważ dane nie są sprawdzane po stronie klienta czy istnieją w bazie a dopiero przez samą bazę to to działa dosyć szybko...