加载XML不喜欢大型xml文件

时间:2015-10-13 18:22:55

标签: php mysql xml

所以我有一些代码从第三方URL抓取XML文件并将其存储在本地。

    function get_file($file, $local_path, $newfilename) { 
        echo "<br>Attempting message download for $file<br>"; 
        $out = fopen($local_path.$newfilename,"wb");
        if ($out == FALSE){ 
              print "File not opened<br>"; 
              exit; 
        } 

        $ch = curl_init(); 

        curl_setopt($ch, CURLOPT_FILE, $out); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        curl_setopt($ch, CURLOPT_URL, $file); 

        curl_exec($ch); 
        echo "<br>Error is : ".curl_error ( $ch); 

        curl_close($ch); 

    }    
    get_file('URL FOR FILE', '../xml/', 'jobs.xml');

这很好用 - 我可以下载XML文件并在我的xml文件夹中查看 - 大约350mb。

然后尝试将其加载到我的数据库中,如下所示:

$mysqli = new mysqli(CONNECTION DETAILS);

$sql = "LOAD XML LOCAL INFILE '../xml/jobs.xml' REPLACE INTO TABLE jobs ROWS IDENTIFIED BY '<job>'";

// check connection
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

// Run the query
$mysqli->query($sql);

// Close the connection
$mysqli->close();

这部分不起作用...... 问题是,它适用于较小的XML测试文件。

LOAD XML应该能够处理350mb的XML吗?如果是这样,为什么这段代码不起作用?

如果350mb太大,我该怎么做才能将xml数据放入我的数据库(在列等中)。 XML文件有大约130,000个条目。

1 个答案:

答案 0 :(得分:0)

我希望mysql / mariadb能够使用流方法处理大数据(大于内存)。但是我不希望它会吃掉任何数据格式。

因此,您有机会必须首先转换XML,或者甚至可以编写自己的应用程序,该应用程序使用流解析器读取文件,然后在数据库上运行适当的SQL语句。