PHP YAML Parsers [geschlossen]

105

Kennt jemand einen guten YAML Parser für PHP? Wenn ja, welche Vor- und Nachteile hat diese Bibliothek?

sgibbons
quelle
versuchen Sie "spyc" lib spyc.sourceforge.net
Shreef
16
+1 Obwohl nicht konstruktiv, war diese Seite für mich äußerst hilfreich
Erick Robertson
2
Angesichts der Qualität der am höchsten bewerteten Antwort auf diese Frage ist es erstaunlich, dass diese Frage als "nicht konstruktiv" abgeschlossen wurde.
Dreftymac
Ich habe gerade meinen Parser von BabyYaml veröffentlicht, der ein einfacherer Cousin von Yaml ist. Wenn Sie interessiert sind, lesen Sie ihn hier: github.com/lingtalfi/BabyYaml
ling
Ich muss ErickRobertson und dreftymac zustimmen, dies hat meine Frage buchstäblich gut beantwortet, und das Schließen hat weitere mögliche gute Antworten verhindert.
Pharao Tools

Antworten:

139

Letzte Aktualisierung : 26. Juli 2017

Hier ist eine Zusammenfassung des Status von YAML in PHP:

  • Wrapper für C-Bibliotheken: Sie werden diese wahrscheinlich wollen, wenn Sie reine Geschwindigkeit benötigen:
    • php-yaml : Wrapper für LibYAML . Verfügbar als PECL-Erweiterung; Es ist auch das in den PHP-Dokumenten .
    • syck : Bindung an syck; auch als PECL-Erweiterung erhältlich. (datiert, siehe unten)

  • Reine PHP-Implementierungen:

    • sfYaml : Die YAML-Komponente von Symfony. Die Motivationen der Autoren finden Sie hier . Er wollte etwas, das " einfach zu bedienen, schnell, gerätetestet und mit klaren Fehlermeldungen " war.
    • spyc : YAML-Parser ohne Abhängigkeiten

Zum Zeitpunkt dieses Schreibens sind die neuesten Veröffentlichungsdaten für die oben genannten Bibliotheken und die von ihnen unterstützten Versionen der YAML-Spezifikation (1.2 ist die neueste Version):

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 
NullUserException
quelle
1
Es gibt andere weniger bekannte Bibliotheken (wie diese aus dem Horde-Projekt), aber ich wollte mich nicht viel damit befassen.
NullUserException
3
Ich benutze sfYaml seit ungefähr zwei Jahren und bei einem Leistungstest wurde mir klar, dass sfYaml :: parse () die meiste Verarbeitungszeit in Anspruch nahm. Ich habe es durch PHP-Yaml ersetzt und die Anwendung ist jetzt 70% schneller! Das ist ein großer Unterschied.
Attila Fulop
1
2019 Update für PHP: "spyc" hat so viele Probleme, während "sfYaml" gut funktioniert.
ViliusL
49

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

Reine PHP-Implementierung, sodass Sie für die Installation keine Änderungen am Server vornehmen müssen. Wenn Geschwindigkeit von größter Bedeutung ist, ist dies möglicherweise nicht die ideale Lösung. Wenn Sie jedoch YAML für Konfigurationen oder für Anwendungen mit relativ geringem Volumen verwenden, ist dies eine fantastische Lösung.

Bei einem YAML-Dokument gibt Spyc ein Array zurück, das Sie nach Belieben verwenden können.

require_once "spyc.php";
$data = Spyc::YAMLLoad($myfile);

Bei einem bestimmten Array gibt Spyc eine Zeichenfolge zurück, die ein aus Ihren Daten erstelltes YAML-Dokument enthält.

$yaml_str = Spyc::YAMLDump($myarray);
drowe
quelle
1
+1 Ich wollte nur eine schnelle und einfache Möglichkeit, YAML in einem Importskript zu verwenden. Meine Anwendung benötigt keine Unterstützung über Importe (und wahrscheinlich eines Tages Exporte) hinaus. Ich fand, dass Spyc, aufgeführt als "ein weiterer YAML-Parser", eine 1-Klick-Lösung war. Ich habe das eine Skript in meinen Skriptordner gelegt, es aufgenommen und eine Methode aufgerufen. Einfacher geht es nicht, und jetzt mache ich mich wieder an die Arbeit - Straßensperre entfernt.
Erick Robertson
1
Veraltete und viele Parse-Yaml-Dateien falsch (einige Daten gehen verloren).
ViliusL
7

Symfony2 verfügt über eine YAML-Komponente, die die meisten YAML 1.2-Spezifikationen unterstützt

https://github.com/symfony/Yaml

Shane
quelle
Dies ist eine gute Antwort, da der Symfony2 YAML-Parser nicht veraltet ist. sfYamlzB ist.
Ferdynator
3

Wenn Sie in Ihrem Projekt viel YAML verwenden, stellen Sie möglicherweise fest, dass die reinen PHP-Bibliotheken wie spyc oder Symfony YAML nicht schnell genug sind. Es gibt mindestens zwei PHP-Bindungen für C YAML-Parser:

  • yaml - ein Wrapper für die Parser-Bibliothek LibYAML YAML 1.1
  • syck - ein Wrapper für die Syck YAML 1.0-Parser-Bibliothek
bd808
quelle
2

Versuchen Sie es mit sfYaml , es ist das Beste, was ich weiß.

Symfony und Doctrine ORM verwenden diesen.

Um es zu bekommen, können Sie Doctrine 1.2 herunterladen und sfYamlaus dem vendorVerzeichnis extrahieren .

Lassen Sie uns wissen, ob es Ihren Bedürfnissen entspricht.

Takeshin
quelle