2008-11-16 7 views
101

Est-ce que quelqu'un connaît un bon analyseur YAML pour PHP? Si oui, quels sont les avantages et les inconvénients de cette bibliothèque?PHP YAML Parsers

+0

essayer "SPYC" lib http://spyc.sourceforge.net/ – Shreef

+10

+1 bien que non-constructive, cette page a été extrêmement utile pour moi –

+0

compte tenu de la qualité de la réponse la plus haute voté sur cette question, il est étonnant que cette question ait été classée comme "non constructive". – dreftymac

Répondre

46

Spyc: https://github.com/mustangostang/spyc

implémentation PHP pur, de sorte que vous n'avez pas besoin d'apporter des modifications au serveur pour l'installation. Si la vitesse est une préoccupation majeure, ce n'est peut-être pas la solution idéale, mais si vous utilisez YAML pour des configurations ou pour un usage relativement peu volumineux, c'est une solution fantastique. Étant donné un document YAML, Spyc renvoie un tableau que vous pouvez utiliser comme bon vous semble. Étant donné un tableau, Spyc renverra une chaîne contenant un document YAML construit à partir de vos données.

$yaml_str = Spyc::YAMLDump($myarray); 
+1

+1 \t Je voulais juste un moyen rapide et facile d'utiliser YAML dans un script d'importation. Mon application n'a pas besoin de support au-delà des importations (et probablement des exportations un jour). J'ai trouvé que spyc, répertorié comme "encore un autre analyseur YAML" était une solution en un clic. J'ai laissé tomber le script dans mon dossier scripts, je l'ai inclus, et j'ai appelé une méthode. Cela ne devient pas plus facile que ça, et maintenant je vais retourner au travail - barrage routier enlevé. –

2

Si vous utilisez beaucoup de YAML dans votre projet, vous pouvez constater que les bibliothèques pures PHP comme SPYC ou Symfony YAML ne sont pas assez rapides. Il y a au moins deux liaisons PHP pour C YAML parseurs:

  • yaml - une enveloppe pour la bibliothèque de l'analyseur libyaml YAML 1.1
  • syck - une enveloppe pour la bibliothèque de l'analyseur Syck YAML 1,0
1

Try sfYaml, c'est le meilleur que je connaisse. Symfony et Doctrine ORM utilisent celui-ci. Pour l'obtenir, vous pouvez Download Doctrine 1.2 et extraire le répertoire sfYaml du vendor. Dites-nous si cela vous convient.

2

Si vous devez tester votre YAML rapidement, j'ai construit: http://yaml-online-parser.appspot.com/. Cela m'aide à écrire YAML, surtout en apprenant.

+0

L'utiliser maintenant, très cool et merci de le mettre en ligne – Aktau

131

Dernière mise à jour: Juillet 26, 2017

Voici un résumé de l'état de YAML en PHP:

  • Enveloppement bibliothèques C: Vous voudrez probablement ceux-ci si vous avez besoin de vitesse pure:
    • php-yaml: Emballage pour LibYAML. Disponible en tant qu'extension PECL; c'est aussi celui sur PHP's docs.
    • syck: liaison à syck; également disponible en extension PECL.(Date, voir ci-dessous)

  • implémentations PHP pur:

    • sfYaml: composante YAML de symfony. Vous pouvez voir les motivations de ses auteurs here. Il voulait quelque chose qui était "facile à utiliser, rapide, testé unitaire et avait des messages d'erreur claires."
    • spyc: analyseur YAML sans dépendances

Au moment où nous écrivons ces lignes, les dernières versions Dates de sortie pour les bibliothèques mentionnées ci-dessus et les versions du YAML spec (1.2 est la dernière version) ils soutiennent sont :

php-yaml 1.3.0  2016-09-24  YAML 1.1 [PHP 5] 
php-yaml 2.0.0  2016-09-24  YAML 1.1 [PHP 7] 
syck  0.9.3  2008-11-18  YAML 1.0 
sfYaml  3.3.5  2017-06-15  YAML 1.1, most of 1.2 
spyc  0.6.2  2017-02-24  YAML 1.1 
+1

Il existe d'autres bibliothèques moins connues (comme [this] (http://pear.horde.org/index.php?package=yaml), de la Horde projet), mais je ne voulais pas trop m'y plonger. – NullUserException

+7

Merci pour la recherche! –

+3

J'utilise sfYaml depuis environ deux ans, et lors d'un test de performance, j'ai réalisé que sfYaml :: parse() prenait le maximum du temps de traitement. Je l'ai remplacé par php-yaml et l'application est maintenant 70% plus rapide! C'est une énorme différence. –

6

Symfony2 a une composante YAML qui prend en charge les plus de la spécification YAML 1.2

https://github.com/symfony/Yaml

+0

C'est une bonne réponse car l'analyseur YAML Symfony2 n'est pas obsolète. 'sfYaml' par exemple est. – ferdynator

Questions connexes