Array XML dönüştürme bellek çok yiyor

0 Cevap php

Ben bir diziye 80 MB XML dosyası dönüştürme am () ve sürecinde RAM neredeyse 1 GB alır. Bu normal midir? Ben verimli bir kaynak olması ve satır satır dosyayı okur xml_parser kullanmayı deneyin, ama 1 GB gerçekten benim için sürpriz demek.

İşte kod:

class XmlToArray
{
    protected $_stack = array();
    protected $_file = "";
    protected $_parser = null;

    protected $_root = array();

    public function __construct($file)
    {
        $this->_file = $file;

        $this->_parser = xml_parser_create("UTF-8");
        xml_set_object($this->_parser, $this);
        xml_set_element_handler($this->_parser, "startTag", "endTag");
    }

    public function startTag($parser, $name, $attribs)
    {
        $new_node = array('name' => strtolower($name), 'attr' => $attribs, 'sub' => array());

        $stack = $this->_stack;
        $current = &$stack[count($stack) - 1];

        if (is_array($current))
        {
            $current['s'][] = &$new_node;
        }
        else
        {
            $this->_root = &$new_node;
        }

        $this->_stack[] = &$new_node;
    }

    public function endTag($parser, $name)
    {
        array_pop($this->_stack);
    }

    public function convert()
    {
        $fh = fopen($this->_file, "r");
        if (!$fh)
        {
            throw new Exception("fail");
        }

        while (!feof($fh))
        {
            $data = fread($fh, 4096);
            xml_parse($this->_parser, $data, feof($fh));
        }

        return $this->_root;
    }
}

0 Cevap