Die [YAML-Funktion] von PHP (https://www.php.net/manual/ja/ref.yaml.php) ist standardmäßig nicht mit PHP gebündelt.
Um YAML-Daten in ein PHP-Array (Syntaxanalyse und -transformation) oder von einem PHP-Array in YAML-Daten mit der YAML-Funktion zu analysieren, müssen Sie die PECL-Erweiterung Jules (https: //www.php) installieren. .net / manual / ja / yaml.installation.php).
PECL ist jedoch nicht auf den neuesten Bildern (Stand: 28.08.2020) "php: 8.0.0beta2" und "php: 8.0.0beta2-alpine" installiert. Es scheint, dass PEAR / PECL-Installationsprogramm seit PHP 7.4 entfernt wurde.
TL; DR
Ich muss PECL aus dem Quellcode erstellen, was ebenfalls problematisch ist. Daher habe ich mit dem Befehl pecl
ein Image erstellt. Es funktioniert nicht nur mit Intel / AMD, sondern auch mit ARMv5, v7, ARM64 wie 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
Da viele der vorgefertigten Pakete im PECL-Repository nicht funktionieren, können wir das PECL-Paket auch aus dem Quellcode installieren.
Brauchen Sie 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
//YAML-Beispielzeichenfolge
$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;
//Analysieren Sie die YAML-Zeichenfolge in das PHP-Array
$parsed = yaml_parse($yaml);
//Vergleichstest
$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