通过php处理巨大的yaml文件

时间:2015-03-10 11:36:12

标签: php yaml

我需要处理一个巨大的yaml文件 - 这是450 MB - 来获取数据库中的数据。因此我尝试使用“spyc”。但文件太大了。

每一章都有--- !de.db.net,DB::Util::M10lDocument行。我需要每章的内容作为一个数组。因此我尝试使用spyc。但是完整的文件太大了。我不知道如何拆分这些章节。

是否可以逐块读取完整文件?

有没有人知道如何使用这个大文件?

1 个答案:

答案 0 :(得分:0)

---是YAML流的document boundary marker。使用将文件作为流处理的YAML解析器应允许您以文档大小的块处理文件,只要每个文档足够小以适合可用内存。

yaml_parse_file提供的yaml PECL extension功能包括从文档流中解析单个文档的功能。没有内置方法来迭代文档(例如foreach支持),但是您可以实现自己的循环来获取顺序文档,并在yaml_parse_file返回false时停止指示所请求的文档没找到。

<?php
$docNum = 0;
while (false !== ($doc = yaml_parse_file('example.yaml', $docNum))) {
    var_dump($doc);
    $docNum++;
}