Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XML] Problem z parsowaniem dużych plików, Skrypt przestaje działać na samym początku.
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

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


Witam,

Szukałem szukałem i nie znalazłem nic na ten temat.

Problem wygląda następująco. Mam pewien system który za pomocą xml_parser()" title="Zobacz w manualu PHP" target="_manual parsuje pliki xml z danymi.

Cały kod:
  1. <?php
  2. $this->parser = xml_parser_create("UTF-8");
  3.        xml_set_object($this->parser, $this);
  4.        xml_set_element_handler($this->parser, 'startXML', 'endXML');
  5.        xml_set_character_data_handler($this->parser, 'charXML');
  6.        
  7.        xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
  8.        xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
  9.        xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE,1);
  10.  
  11.        if (!($fp = @fopen($this->url, 'rb'))) {
  12.            $this->error("Cannot open {$this->url}");
  13.        }
  14.    
  15.        $endLine = false;
  16.        while (!feof($fp))                                                                                
  17.        {
  18.            $line = '';
  19.            
  20.            for ($i=0; $i<20; $i++)
  21.            {
  22.                $line .= fgets($fp);
  23.                if (feof($fp)) {
  24.                    $endLine = true;
  25.                    break 1;
  26.                }
  27.            }
  28.    
  29.            if (!xml_parse($this->parser, trim($line), feof($fp)))
  30.            {
  31.                echo '<pre>'.$line.'</pre>';
  32.                $this->error(sprintf('XML error at line %d column %d',
  33.                xml_get_current_line_number($this->parser),
  34.                xml_get_current_column_number($this->parser)), $line);
  35.            }  
  36. }
  37. ?>



Przy małych plikach np 2,3,5 mb (1000-3000 linii) wszystko wygląda dobrze, jednak w przypadku gdy plik ma np 100 mb. (100 000 linii) Albo pobiera tylko część np pierwsze 100 linii, albo po prostu nie uruchamia się i wyświetla się biały ekran.

Oczywiście podanie na początku
  1. <?php
  2. ini_set('memory_limit', '64M');
  3. ?>


nic nie daje. Czy metoda xml_parser() posiada jakieś ograniczenia. Co może być przyczyną tego nie mogę parsować dużych plików ?
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 22.08.2025 - 02:48