php 如何解析 yaml 格式内容?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔需要使用php对yaml
/yml
文件进行处理,所以在服务器上面,装了php
的yaml
扩展。在本篇文章中,苏南大叔要实现的需求,就是解析yaml
文档。
本文测试环境:centos
/php72
。安装yml
的服务器端扩展的过程,如下:
待处理文档
我们假设有这样一个名为yml.yml
文档,放置于苏南大叔的博客域名下。
event1:
name: My Event
date: 2017-11-11
根据 http://doc.php.sh/zh/ref.yaml.html 这里的说明,parse
函数一共有三个,并且这三个函数都各有四个参数。在本篇文章中,我们只考虑其第一个参数。后续三个参数的使用,我们以后另外说明。返回值是个mixed
,不过,苏南大叔理解着,通常意义上来说,应该就是个array
类型。
通过字符串方式处理
这个是三个系列函数中最基础的函数,使用起来也比较简单。具体说明见这里:
$yaml = <<<YAML
event1:
name: My Event
date: 2017-11-11
YAML;
$data = yaml_parse($yaml);
print_r($data);
我们得到了这样一个返回值:
Array
(
[event1] => Array
(
[name] => My Event
[date] => 2017-11-11
)
)
通过url
方式处理
php
函数为:yaml_parse_url
,说明文档见这里:
当然我们这里还是仅仅探讨最简单最常见的使用情况,根据文档说明,这个函数的使用姿势可能是这样的:
$obj=yaml_parse_url("https://newsn.net/yml.yml");
print_r($obj);
然后我们应该可以得到一个array
,但是苏南大叔在试验这个函数的时候,恒定返回false
,更换了很多其他人的yml
地址,也都是false
。根据文档说明,返回false
的话,就是说“失败了"。可能是苏南大叔的服务器限制的问题,不允许这个yaml
的扩展访问网络。目前,暂无解决方案。大家如果有知道,如何处理的,欢迎给苏南大叔留言。谢谢。(当然,这个测试文件yml.yml
,在大家访问的时候,可能已经删除了。)
不过,我们可以根据已有的函数,做个变通,就得到了我们期望的结果。变通如下:
//$obj=yaml_parse_url("https://newsn.net/yml.yml");
$obj=yaml_parse(file_get_contents("https://newsn.net/yml.yml"));
print_r($obj);
我们利用 yaml_parse
和 file_get_contents
的组合,获得了 yaml_parse_url
的效果。
通过文件方式处理
函数为:yaml_parse_file
,这个函数使用起来也非常简单。说明文档见这里:
$obj=yaml_parse_file("yml.yml");
print_r($obj);
这个函数也可以得到苏南大叔想要的数据。
总结
yaml
和yml
是同一种文件,和xml
类似。yml
文档相对于xml
文档,易读性更高。但是应用场景上来说,却是少很多。普及性相对较差。更多有关yml
的开发经验,请阅读苏南大叔的精彩好文。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。