[PHP8] Installer et utiliser la fonction YAML de PECL (analyseur YAML) avec Docker

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;

Références

Recommended Posts

[PHP8] Installer et utiliser la fonction YAML de PECL (analyseur YAML) avec Docker
Utiliser Puphpeteer avec Docker
PHP jetable avec Docker
Utiliser GDAL avec Python avec Docker
Les débutants installent Docker pour Mac et préparent l'environnement d'exploitation php7.0
Utilisez log4j2 avec YAML + Gradle
[Docker] À utiliser à tout moment avec Docker + Rails
Installer Java avec Docker basé sur Ubuntu 16.04
Utiliser java avec MSYS et Cygwin
Installez Java et Tomcat avec Ansible
[PDO → Connexion DB avec docker, PHP]
Utiliser Git avec SourceTree et Eclipse
Utilisez JDBC avec Java et Scala.
Hello World avec Docker et langage C
Installez Xcode et utilisez Hello Swift!
Microservices avec Docker et Cloud Performance
Défi pour installer WSL2 et docker
Utilisation de cuda11.0 avec pytorch en utilisant Docker
Installez docker et docker-compose sur Alpine Linux
Construction de Rails 6 et environnement PostgreSQL avec Docker
Installez Docker Desktop pour Mac avec Homebrew
Utiliser le lien symbolique avec la construction en plusieurs étapes de Docker
Supprimez wine3.0 et insérez wine5.0 (winehq) dans ubuntu18.04LTS
Fonction d'authentification avec Play Framework [Enregistrement et authentification]
Communiquer entre Gitlab et Gitlab Runner lancé avec Docker
Installer Docker avec WSL2 Memo ([Partie 2] Introduction à Docker)
Installez Docker et créez un environnement d'exécution Java