La [fonction YAML] de PHP (https://www.php.net/manual/ja/ref.yaml.php) n'est pas fournie avec PHP par défaut.
Pour analyser les données YAML dans un tableau PHP (analyse syntaxique et transformer), ou analyser les données YAML d'un tableau PHP avec une fonction YAML, vous devez installer l'extension PECL Jules (https: //www.php) .net / manuel / ja / yaml.installation.php).
Cependant, PECL n'est pas installé sur les dernières images (en date du 28/08/2020) php: 8.0.0beta2
et php: 8.0.0beta2-alpine
. Il semble que l'installateur PEAR / PECL a été éliminé depuis PHP 7.4.
TL; DR
J'ai besoin de construire PECL à partir de la source, ce qui est également un problème, j'ai donc créé une image avec la commande pecl
. Cela fonctionne non seulement avec Intel / AMD mais aussi avec ARMv5, v7, ARM64 comme Raspeye.
docker pull keinos/php8-jit:latest
$ docker run --rm keinos/php8-jit pecl version
PEAR Version: 1.10.12
PHP Version: 8.0.0-dev
Zend Engine Version: 4.0.0-dev
Running on: Linux 3fc54c34122a 4.19.76-linuxkit #1 SMP Tue May 26 11:42:35 UTC 2020 x86_64
De plus, étant donné que de nombreux packages pré-construits dans le référentiel PECL ne fonctionnent pas, nous rendons également possible l'installation du package PECL à partir des sources.
Besoin de yaml-dev
docker-php-ext-pecl install yaml
TS; DR
Dockerfile
FROM keinos/php8-jit:latest
USER root
COPY sample.php /app/sample.php
RUN \
apk --no-cache add yaml-dev && \
docker-php-ext-pecl install yaml
ENTRYPOINT [ "php", "/app/sample.php" ]
sample.php
<?php
//Exemple de chaîne YAML
$yaml = <<<EOD
---
invoice: 34843
date: "2001-01-23"
bill-to: &id001
given: Chris
family: Dumars
address:
lines: |-
458 Walkman Dr.
Suite #292
city: Royal Oak
state: MI
postal: 48046
ship-to: *id001
product:
- sku: BL394D
quantity: 4
description: Basketball
price: 450
- sku: BL4438H
quantity: 1
description: Super Hoop
price: 2392
tax: 251.420000
total: 4443.520000
comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
...
EOD;
//Analyser la chaîne YAML dans le tableau PHP
$parsed = yaml_parse($yaml);
//Test de comparaison
$actual = json_encode($parsed);
$expect = '{"invoice":34843,"date":"2001-01-23","bill-to":{"given":"Chris","family":"Dumars","address":{"lines":"458 Walkman Dr.\n Suite #292","city":"Royal Oak","state":"MI","postal":48046}},"ship-to":{"given":"Chris","family":"Dumars","address":{"lines":"458 Walkman Dr.\n Suite #292","city":"Royal Oak","state":"MI","postal":48046}},"product":[{"sku":"BL394D","quantity":4,"description":"Basketball","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."}';
echo '- Function test ... ', ($expect === $actual) ? 'OK' : 'NG', PHP_EOL;
Recommended Posts