学习PHP中YAML操作扩展的使用_码农老张Zy的博客-CSDN博客


本站和网页 https://blog.csdn.net/zhangyue0503/article/details/121279936 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

学习PHP中YAML操作扩展的使用_码农老张Zy的博客-CSDN博客
学习PHP中YAML操作扩展的使用
码农老张Zy
于 2021-11-11 18:02:00 发布
250
收藏
文章标签:
字符串
python
java
php
编程语言
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangyue0503/article/details/121279936
版权
学习PHP中YAML操作扩展的使用
YAML 这个东西,说实话,自己用得并不多。在学习自动化测试相关的内容时候,接触过使用这种配置文件来配置 Travis CI 的持续集成操作,当然,当时也是以学习性质为主的。虽说接触得不多,但也知道确实这种配置格式的写法基本上已经成为了现在的主流。所以关于具体的 YAML 相关的内容在这里就不多做解释了,还不是太了解的同学可以自行查阅一些相关的文档。
我们今天来学习的主要是一个 PHP 中用来解析和转换 YAML 格式的扩展,安装过程并没有什么特别的可以说明的地方,就和其它的扩展一样进行安装即可。不过这个扩展需要一个 libyaml-devel ,在 CentOS 中直接通过 yum 或者 dnf 是无法安装的,我们可以在文末的链接中找到下载地址。
将 PHP 数据转换成 YAML
对于将 PHP 的数据转换成 YAML 来说,其实就和 JSON 相关的操作差不多,将数组转换成 YAML 格式的字符串。
$addr = array(
    "given" => "Chris",
    "family"=> "Dumars",
    "address"=> array(
        "lines"=> "458 Walkman Dr.
        Suite #292",
        "city"=> "Royal Oak",
        "state"=> "MI",
        "postal"=> 48046,
      ),
  );
$invoice = array (
    "invoice"=> 34843,
    "date"=> 980208000,
    "bill-to"=> $addr,
    "ship-to"=> $addr,
    "product"=> array(
        array(
            "sku"=> "BL394D",
            "quantity"=> 4,
            "description"=> "篮球",
            "price"=> 450,
          ),
        array(
            "sku"=> "BL4438H",
            "quantity"=> 1,
            "description"=> "Super Hoop",
            "price"=> 2392,
          ),
      ),
    "tax"=> 251.42,
    "total"=> 4443.52,
    "comments"=> "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.",
  );
$yamlString = yaml_emit($invoice);
var_dump($yamlString);
// string(624) "---
// invoice: 34843
// date: 980208000
// bill-to:
//   given: Chris
//   family: Dumars
//   address:
//     lines: |-
//       458 Walkman Dr.
//               Suite #292
//     city: Royal Oak
//     state: MI
//     postal: 48046
// ship-to:
//   given: Chris
//   family: Dumars
//   address:
//     lines: |-
//       458 Walkman Dr.
//               Suite #292
//     city: Royal Oak
//     state: MI
//     postal: 48046
// product:
// - sku: BL394D
//   quantity: 4
//   description: "\u7BEE\u7403"
//   price: 450
// - sku: BL4438H
//   quantity: 1
//   description: Super Hoop
//   price: 2392
// tax: 251.42
// total: 4443.52
// comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
// ...
// "
可以看到 yaml_emit() 函数转换的结果是非常标准的 YAML 格式。开头有 --- ,结尾有 ... 。但你会发现有很多教程或者框架中的 .yml 文件中是没有这些符号的,从官方文档中得知这些符号是建议写得,而我们的扩展则是非常地遵守建议,也就是转换的结果非常地标准。
此外,在测试代码中我们加入了中文的内容。可以看到直接转换的时候中文被编码了。就像 JSON 操作一样,在 YAML 这个扩展的函数中,我们也可以指定编码格式让中文原样显示。
var_dump(yaml_emit($invoice, YAML_UTF8_ENCODING));
// string(616) "---
// ………………
//   description: 篮球
// ………………
// ...
// "
将 YAML 转为 PHP 数组
没错,也是类似于 JSON 操作的,将 YAML 格式的字符串格式内容反转回 PHP 数据内容。
var_dump(yaml_parse($yamlString));
// array(8) {
//     ["invoice"]=>
//     int(34843)
//     ["date"]=>
//     int(980208000)
//     ["bill-to"]=>
//     array(3) {
//       ["given"]=>
//       string(5) "Chris"
//       ["family"]=>
//       string(6) "Dumars"
// ………………
// ………………
同样非常简单地一个 yaml_parse() 函数。除了直接操作字符串之外,我们还可以直接提取文件内容来进行转换,包括上面的 yaml_emit() 函数也是有类似的直接将结果写入到文件中的。
var_dump(yaml_parse_file('styleci.yml'));
// array(3) {
//     ["php"]=>
//     array(3) {
//       ["preset"]=>
//       string(7) "laravel"
//       ["disabled"]=>
//       array(1) {
//         [0]=>
//         string(10) "unused_use"
//       }
//       ["finder"]=>
//       array(1) {
//         ["not-name"]=>
//         array(2) {
//           [0]=>
//           string(9) "index.php"
//           [1]=>
//           string(10) "server.php"
//         }
//       }
//     }
//     ["js"]=>
//     array(1) {
//       ["finder"]=>
//       array(1) {
//         ["not-name"]=>
//         array(1) {
//           [0]=>
//           string(14) "webpack.mix.js"
//         }
//       }
//     }
//     ["css"]=>
//     bool(true)
//   }
我们测试的这个文件就是 Laravel 中自带的那个 .styleci.yml 文件。在 Laravel 框架中并没有要求我们安装这个 YAML 扩展,似乎在框架中本身就有解决读取转换这种 YAML 格式的工具,这个我们最后再说。和 yaml_parse_file() 类似地,yaml_emit_file() 是直接将 PHP 数据转换为 YAML 格式之后直接写入到一个文件中,大家可以自己测试一下。
回调函数处理标签
不管是 yaml_emit() 还是 yaml_parse() 都是支持一个回调参数操作的。我们先来看看例子。
// php:
//   preset: !laravel laravel
//   disabled:
// ………………
// ………………
function callback($value){
    return str_replace('laravel', 'new version laravel8', $value);
$ndocs = 0;
var_dump(yaml_parse_file('styleci.yml', 0, $ndocs, ['!laravel'=>'callback']));
// array(3) {
//     ["php"]=>
//     array(3) {
//       ["preset"]=>
//       string(20) "new version laravel8"
//       ["disabled"]=>
//       array(1) {
// ……………………
// ……………………
这是什么意思呢?!laravel 这种写法可以看做是 YAML 中的一种标签格式的写法。而这个回调的作用就是在遇到类似的这类标签的时候,使用什么回调函数来进行处理。比如我们的原文档中的 !laravel 后面的内容是 laravel 。在回调函数中我们将内容替换成了 new version laravel8 ,于是,最后输出的结果就是 preset 字段的内容变成了 new version laravel8 。当然,更加详细的内容以及更多地语法还是需要我们深入地了解 YAML 格式的语法才能够更加清楚,所以这里也就不多说了,毕竟自己也接触得不多。
总结
对于这个扩展的内容不多,而且即使是真实的业务环境中需要操作 YAML 格式的配置文件的话估计我也不会用它。为什么呢?当然是因为 Composer 里面已经有很多处理 YAML 的组件可以供我们使用啦。完全不需要通过扩展编译安装的方式来对服务器上的 PHP 环境进行改变。如果是自己使用的话,在 packagist.org 中能找到很多组件,而如果是使用 Laravel 的话,它的底层使用的其实是 symfony 框架中 yaml 处理组件。直接使用 composer require symfony/yaml 就可以为自己的小项目添加这个组件咯。具体内容可以参考这个文档:
https://symfony.com/doc/current/components/yaml.html
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/01/source/10.学习PHP中YAML操作扩展的使用.php
参考文档:
https://www.php.net/manual/zh/book.yaml.php
http://www.rpmfind.net/linux/rpm2html/search.php?query=libyaml-devel(x86-64)
http://bd808.com/pecl-file_formats-yaml/
码农老张Zy
关注
关注
点赞
收藏
打赏
评论
学习PHP中YAML操作扩展的使用
学习PHP中YAML操作扩展的使用YAML 这个东西,说实话,自己用得并不多。在学习自动化测试相关的内容时候,接触过使用这种配置文件来配置 Travis CI 的持续集成操作,当然,当时也...
复制链接
扫一扫
php yaml扩展,php的扩展 - yaml
weixin_33491377的博客
03-11
399
今天查看php扩展库时(http://pecl.php.net/package-s...),看到有个叫yaml的扩展位列榜首,竟有2000多万下载数,这么牛逼的东西我咋没听说过那?既然孤陋寡闻了,那就赶紧学习学习吧。 什么是yaml?YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便,其主要功能用途类似于XML或JSON。YAML参考了其他多种语言,包括:XML、C语言...
参与评论
您还未登录,请先
登录
后发表或查看评论
php安装官方Yaml扩展
最新发布
m0_38078841的博客
10-05
220
php安装官方Yaml扩展
Linux安装php yaml扩展
qq_32166533的博客
11-29
460
Linux安装php yaml扩展
1、首先得安装libyaml
git clone https://github.com/yaml/libyaml
cd libyaml
./bootstrap
./configure
make
make install
2、安装扩展 php7.3版本
wget http://pecl.php.net/get/yaml-2.0.4.tgz
tar -zx...
php yaml.dll,PHP yaml_parse_file 用法 手册 | 示例代码
weixin_29220405的博客
03-24
130
As Jesse Donat mentioned the type will be infered automatically. To enforce some type you can use the callback facility like this:return newDateTime($value);}$yaml= <<name: My Eventdate: !date 2...
php5.5 yaml 安装,THINKPHP支持YAML配置文件的设置方法
weixin_31205797的博客
03-10
123
为什么要用 yaml因为 Yaml 简单,而且对人类友好;在哪里会用到?最基本的,在 ThinkPHP 的配置文件里面就可以选择 Yaml 的格式,你是愿意写 Yaml 的简洁格式配置呢?还是愿意写又长又臭又难写的 PHP array 呢?问题来了于是,我把配置格式改为 Yaml:// /index.php// 定义配置文件的格式为 yamldefine('CONF_EXT', '.yaml');...
php yaml扩展,使用官方的Alpine Docker映像将yaml扩展添加到php
weixin_29799175的博客
03-11
222
我正在使用这个官方的php Docker映像:[https](https://github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26f83ec17360bc68/7.1/alpine/Dockerfile)//github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26...
(超详细) hyperf官方dockerfile文件增加PHP扩展 sqlsrv pdo_sqlsrv 直接连接sql server数据库进行开发
夏夏的博客
08-02
390
认真看完代码中的注释,真的很帮助我们的开发哦.
dockerfile php扩展,Dockerfile 文件中添加 php 扩展
weixin_39814454的博客
03-23
250
添加redis扩展源码安装方式ARG INSTALL_PHPREDIS=trueARG PHPREDIS_VERSION=3.1.3RUN if [ ${INSTALL_PHPREDIS} = true ]; then \# Install Php Redis Extensioncurl -L -o /tmp/redis.tar.gz https://github.com/phpredis/php...
dockerfile安装php,Dockerfile 中 配置安装 php 扩展
weixin_39904587的博客
03-20
458
以下配置实现了 在docker环境中安装scwl中文分词的php扩展:# scwlRUN curl 'http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2' -o scws-1.2.3.tar.bz2 \&& tar -xjf scws-1.2.3.tar.bz2 \&& rm scws-1.2.3.tar....
php-yaml:用于解析 YAML 文件的 PHP 库
06-20
YAML
用于解析 YAML 文件的 PHP 库。
安装
通过 Composer 正常安装。
用法
$ parsed = Travis \ YAML :: from_file ( $ path )-> to_array ();
$ parsed = Travis \ YAML :: from_string ( $ string )-> to_array ();
在PHP项目中使用YAML
culh2177的博客
08-11
386
Test fixtures, configuration files, and log files all need to be both human and machine readable. YAML (YAML Ain’t Markup Language) is a less-verbose data serialization format than XML and has become ...
linux 安装php yaml,使用官方的Alpine Docker映像将yaml扩展添加到php
weixin_30055951的博客
05-14
189
我正在使用这个官方的php Docker映像:[https](https://github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26f83ec17360bc68/7.1/alpine/Dockerfile)//github.com/docker-library/php/blob/76a1c5ca161f1ed6aafb2c2d26...
php 读取yaml文件
aftermetyou的博客
11-09
392
遇到一个项目需要读取yaml文件具体操作如下
# 读取yaml需要symfony的yaml组件
$ composer require symfony/yaml
db.yml文件
db_config:
username: 'root'
password: 'root'
host: '127.0.0.1'
db_name: 'panoddb'
php获取方式
$config = (ne...
php 解析yaml,php yaml 解析 报错问题
weixin_42515100的博客
04-07
168
今天用php写了一个简单的博客引擎,其中要用php yaml解析器,但是在使用的过程中遇到了这样的报错[09-Dec-2017 14:54:25 PRC] PHP Warning: yaml_parse(): end of stream reached without finding document 0 in /home/twikoizo/public_html/dev/core/module...
php的扩展 - yaml
weixin_34050519的博客
02-27
633
今天查看php扩展库时(http://pecl.php.net/package-s...),看到有个叫yaml的扩展位列榜首,竟有2000多万下载数,这么牛逼的东西我咋没听说过那?既然孤陋寡闻了,那就赶紧学习学习吧。
什么是yaml?YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便,其主要功能用途类似于XML...
YAML的PHPphp扩展。
bywayboy的专栏
03-17
5351
网上闲逛。突然发现php有yaml这个东西。无奈找不到扩展。最后找到一个源码。syck的。呵呵…… 编译是个麻烦事。更何况我还只有 load和dump两个函数。值呢个是 string 到 array 和 array到string。 手头只有vs2005 没招。下个php源码。建个项目开始,找google要了N篇答案。N>=20.看完后迷迷糊糊开始了。一切顺利----除了做笔记花费了不少
php5.5 yaml 安装,YAML的PHPphp扩展。 | 学步园
weixin_35515918的博客
03-10
65
网上闲逛。突然发现php有yaml这个东西。无奈找不到扩展。最后找到一个源码。syck的。呵呵…… 编译是个麻烦事。更何况我还只有 load和dump两个函数。值呢个是 string 到 array 和 array到string。手头只有vs2005 没招。下个php源码。建个项目开始,找google要了N篇答案。N>=20.看完后迷迷糊糊开始了。一切顺利----除了做笔记花费了不少时间外。...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:技术黑板
设计师:CSDN官方博客
返回首页
码农老张Zy
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
393
原创
8500
周排名
2999
总排名
23万+
访问
等级
6377
积分
239
粉丝
139
获赞
119
评论
187
收藏
私信
关注
热门文章
两周看完乔布斯传,说说感受
16686
PDMA新产品开发手册【笔记】(二)
4082
PDMA新产品组合管理【笔记】
3930
敏捷项目管理【海史密斯版】(一)
3878
PHP的OpenSSL加密扩展学习(三):证书操作
2659
分类专栏
PHP
31篇
运维
产品项目
最新评论
PHP设计模式之观察者模式
jacket516:
订单售出类图对应代码:
43行 $ob == $observer 中 $observer变量不存在,应该是foreach中写错了
【Swoole系列4.6】协程连接池
木吉-子:
亲,想了解连接池的含义, 你来一句"不细讲了", 绝杀
【Swoole系列3.1】进程、线程、协程,面试你被问了吗?
qq_27372613:
讲的很好,希望可以坚持
使用PHP获取图像文件的EXIF信息
qq_17716215:
那怎么样写入呢?
【Swoole系列2.6】Redis 服务器
吃橘子的汤圆:
大佬这个一般使用场景是啥
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
【信管5.1】进度管理规划与活动
【信管4.3】确认与控制范围
【信管4.2】定义范围与WBS
2022
12月
9篇
11月
11篇
10月
12篇
09月
9篇
08月
9篇
07月
8篇
06月
9篇
05月
7篇
04月
8篇
03月
9篇
02月
7篇
01月
9篇
2021年96篇
2020年133篇
2019年20篇
2018年36篇
2017年1篇
目录
目录
分类专栏
PHP
31篇
运维
产品项目
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
码农老张Zy
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值