Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MSSQL][XML] Przekroczona pamiec
jot
post 9.03.2009, 16:18:34
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


Plik XML o strukturze zamieszczonej ponizej probuje potraktowac kodem php i wrzucic dane do mysql'a w miedzyczasie zmieniajac kodowanie. Niestety dziala tylko przy malych plikach. Przy wiekszym 4,5 megaowym pliku przekracza dozowlona liczbe pamieci...
cos w stylu: Fatal error: Allowed memory size of 33554432
Czy da sie przerobic moj skrypt php zeby nie byl daki pamieciozerny ?

z gory dziekuje za pomoc !

Plik XML o strukturze:

Kod
<?xml version="1.0" encoding="Windows-1250"?>
<colors>
<row id_Model="1" id_Color="1" Color="Biały Banquise" Rgb="FDFDFD" />
<row id_Model="1" id_Color="6" Color="Czarny Onyx" Rgb="000000" />
<row id_Model="1" id_Color="259" Color="Czerwony Ardent" Rgb="711F2B" />
<row id_Model="1" id_Color="2689" Color="Szary Aluminium (metalizowany)" Rgb="ADAAAD" />
<row id_Model="1" id_Color="2240" Color="Szary Fer (metalizowany)" Rgb="7B868C" />
...
</colors>


Probuje potraktowac kodem w miedzyczasie zmieniajac jego kodowanie:

Kod
function puttomysql($a)
{
connect();
$xml = simplexml_load_file('foto/'.$a.'.xml');  

//petla odczytujaca po kolei elementy xml'a
foreach($xml -> row as $element)
{
// petla zczytujaca atrybuty z kazdego row
foreach($element -> attributes() as $nazwa=>$wartosc){
    $wartosc=iconv('utf-8','iso-8859-2',$wartosc);
     $tablica["$nazwa"] = "$wartosc";
      }
//petla wrzucajaca atrybuty wraz z nazwami do tablicy
        while( list($klucz, $wartosc) = each($tablica) )  
        {     
        $pole=$pole.", `".$klucz."`";
        $wartpola=$wartpola.', \''.$wartosc.'\'';  
        }
//tworzenie polecen do mysql
$pole=strchr($pole, " ");
$wartpola=strchr($wartpola, " ");
    
$polecenie="insert into `$a`($pole) values ($wartpola)";
$wynik=mysql_query($polecenie);
//zwolnienie zmiennych i tablicy
unset($pole, $wartpola, $tablica);
   }
Go to the top of the page
+Quote Post
franki01
post 9.03.2009, 16:59:50
Post #2





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Utwórz plik .htaccess i wpisz w nim poniższy kod:
Kod
php_value memory_limit 200M

Możesz tylko mieć nadzieje, że konfiguracja serwera nie blokuje takiego czegoś.
Go to the top of the page
+Quote Post
jot
post 9.03.2009, 17:16:08
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 9.02.2006

Ostrzeżenie: (0%)
-----


serwer jest niby ustawiony na 256 megsow ;/

nie ma innego sposobu na wyciagniecie danych z tego typu xmla zeby nie mulilo pamieci ?
Go to the top of the page
+Quote Post
wookieb
post 9.03.2009, 17:17:12
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Np zastosowanie innego parsera xml
http://pl.php.net/xmlreader


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 11:39