【问题标题】:what would be the proper way to automate an xml import自动化 xml 导入的正确方法是什么
【发布时间】:2012-07-23 01:38:33
【问题描述】:

我编写了一个脚本,通过从源磁盘中选择数据并通过按钮提交将数据从 xml 文件导入 mysql 数据库。但是,如果要使用 3rd 方应用程序来自动执行此导入会怎样。检查xml路径的get参数是否存在并获取其内容并像以前一样导入是否合适?还是有更好的方法?

通过获取参数我的意思是这样的:

http://domain.com/import.php?path=externaldomain.com/xml/page.xml

【问题讨论】:

  • 如果能得到JSON格式的数据。相信我,它会更顺畅。想象一下,只需使用 PHP 的 json_encode($a, true) 将 JSON 对象转换为关联数组。然后你所要做的就是使用 mysql 语句插入或什么

标签: php xml web-services


【解决方案1】:

这取决于您要导入的数据类型。如果您从 rss 提要导入数据,则此方法很好。但是,如果您要导入个人数据,这可能不是一个好方法。

如果您正在处理其他人不应该看到的关键数据,我会建议更安全的方法。您可以开始考虑通过 ftp 导入 xml 文件,从服务器安全文件夹后面下载它们。要求第 3 方应用程序将 xml 文件上传到您选择的安全位置。在某种安全性背后发生的任何事情都比建议的个人数据方法更好。

【讨论】:

  • 它适用于电子商务网站,它与数量等产品库存信息有关。 xml 文件有大约 35k 条数据记录。如果 get 方法是实现自动化的常规方法,那么这就是我将采用的方法。谢谢
【解决方案2】:

首先,我建议您使用cURL。无论您的 XML 有多大,内存问题都会减少。

$fp = fopen('/var/www/vhosts/my.com/xml/feed.xml', 'w'); // opening file handler to write feed in

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/xml/page.xml'); // setting URL to take XML from
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // If result is gziped
curl_setopt($ch, CURLOPT_SSLVERSION, 3); // OpenSSL issue
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);  // Wildcard certificate
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // disabling buffer output, bec. we want to write XML to the file first and don't need it to be returned into variable
curl_setopt($ch, CURLOPT_FILE, $fp); // here we should transfer opened file handler to the cURL and it should be writable!
$result = curl_exec($ch); // executing download
$reponse_code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); // retrieving HTTP return code for our request. Was it successful or not.

因此,即使 XML 提要在 SSL 和 GZIPed 之后,您也可以直接下载/保存到文件中。

使用curl_getinfo(),您可以获得有关您的请求的各种信息。如果程序应该是自动化的,那么如果请求失败,最好决定要做什么。

然后,如果文件不大(我的意思是超过 200 - 300 Mb 的非常大的文件),您可以使用 SimpleXML仅从 PHP5 开始提供)库并解析您的数据。如果您在 PHP4 下(今天仍然可以)尝试查找 libXML,这也非常有用。

如果您检索的文件相当大:) 具有FILE 权限的 MySQL 数据库是您的朋友。

【讨论】:

    猜你喜欢
    • 2016-10-27
    • 2019-09-04
    • 2016-01-11
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多