gpt4 book ai didi

php - 通过 FTP 解析大型 XML 文件

转载 作者:可可西里 更新时间:2023-10-31 23:50:24 25 4
gpt4 key购买 nike

我需要解析位于 FTP 服务器上的大型 XML 文件 (>1 GB)。我有一个由 ftp_connect() 获取的 FTP 流。 (我将此流用于其他与 FTP 相关的操作)

我知道 XMLReader 是大型 XML 文件的首选,但它只接受 URI。所以我假设需要一个流包装器。我所知道的唯一允许我检索文件的一小部分的 ftp 函数是 ftp_nb_fget() 与 ftp_nb_continue() 的组合。

但是,我不知道应该如何将所有这些放在一起以确保使用最少的内存。

最佳答案

看起来您可能需要 build on top of the low-level XML parser bits .

特别是,您可以使用 xml_parse在调用带有回调的各种xml_set_* 函数来处理元素、字符数据、 namespace 、实体等之后,一次处理一个 XML 字符串 block 。只要解析器检测到它有足够的数据,就会触发这些回调,这应该意味着您可以在从 FTP 站点以任意大小的 block 读取文件时处理文件。 p>


使用 CLI 和 xml_set_default_handler 的概念证明,对于没有特定处理程序的所有内容都会调用它:

php > $p = xml_parser_create('utf-8');
php > xml_set_default_handler($p, function() { print_r(func_get_args()); });
php > xml_parse($p, '<a');
php > xml_parse($p, '>');
php > xml_parse($p, 'Foo<b>Bar</b>Baz');
Array
(
[0] => Resource id #3
[1] => <a>
)
Array
(
[0] => Resource id #3
[1] => Foo
)
Array
(
[0] => Resource id #3
[1] => <b>
)
Array
(
[0] => Resource id #3
[1] => Bar
)
Array
(
[0] => Resource id #3
[1] => </b>
)
php > xml_parse($p, '</a>');
Array
(
[0] => Resource id #3
[1] => Baz
)
Array
(
[0] => Resource id #3
[1] => </a>
)
php >

关于php - 通过 FTP 解析大型 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5317669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com