Parsery PHP YAML [zamknięte]

105

Czy ktoś zna dobry parser YAML dla PHP? Jeśli tak, jakie są wady i zalety tej biblioteki?

sgibbons
źródło
wypróbuj bibliotekę „spyc” spyc.sourceforge.net
Shreef
16
+1 chociaż nie konstruktywna, ta strona była dla mnie niezwykle pomocna
Erick Robertson
2
biorąc pod uwagę jakość odpowiedzi na to pytanie, która uzyskała najwięcej głosów, zdumiewające jest, że pytanie to zostało zamknięte jako „nie konstruktywne”.
dreftymac
Właśnie wydałem mój parser BabyYaml, który jest prostszym kuzynem Yamla, jeśli jesteś zainteresowany, sprawdź to tutaj: github.com/lingtalfi/BabyYaml
ling
Muszę zgodzić się z ErickRobertson i dreftymac, co dosłownie dobrze odpowiedziało na moje pytanie, a zamknięcie go uniemożliwiło dalsze możliwe dobre odpowiedzi.
Pharaoh Tools

Odpowiedzi:

139

Ostatnia aktualizacja : 26 lipca 2017 r

Oto podsumowanie stanu YAML w PHP:

  • Opakowania do bibliotek C: prawdopodobnie będziesz ich potrzebować, jeśli potrzebujesz czystej szybkości:
    • php-yaml : Wrapper dla LibYAML . Dostępne jako rozszerzenie PECL; jest to również ten w dokumentacji PHP .
    • syck : powiązanie z syck; dostępne również jako rozszerzenie PECL. (z datą, patrz poniżej)

  • Czyste implementacje PHP:

    • sfYaml : komponent YAML Symfony. Można zobaczyć motywacje jego autorów tutaj . Chciał czegoś, co byłobyłatwe w użyciu, szybkie, przetestowane pod kątem urządzeń i posiadające jasne komunikaty o błędach ”.
    • spyc : parser YAML bez zależności

W chwili pisania tego tekstu, daty wydania najnowszych wersji wspomnianych bibliotek i obsługiwane przez nie wersje specyfikacji YAML (1.2 to najnowsza wersja) to:

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
źródło
1
Istnieją inne mniej znane biblioteki (takie jak ta , z projektu Horde), ale nie chciałem się w nie zagłębiać.
NullUserException
3
Używam sfYaml od około dwóch lat i podczas testu wydajności stwierdziłem, że sfYaml :: parse () zajęło najwięcej czasu przetwarzania. Zastąpiłem go php-yaml i aplikacja jest teraz o 70% szybsza! To ogromna różnica.
Attila Fulop
1
Aktualizacja 2019 dla PHP: "spyc" ma tak wiele problemów, podczas gdy "sfYaml" działa dobrze.
ViliusL
49

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

Czysta implementacja PHP, więc nie musisz dokonywać żadnych modyfikacji serwera w celu instalacji. Jeśli zależy Ci na szybkości, może to nie być idealne rozwiązanie, ale jeśli używasz YAML do konfiguracji lub stosunkowo niskiego wolumenu, jest to fantastyczne rozwiązanie.

Biorąc pod uwagę dokument YAML, Spyc zwróci tablicę, której możesz użyć w dowolny sposób.

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

Biorąc pod uwagę tablicę, Spyc zwróci napis zawierający dokument YAML zbudowany z twoich danych.

$yaml_str = Spyc::YAMLDump($myarray);
drowe
źródło
1
+1 Chciałem tylko szybkiego i łatwego sposobu użycia YAML w skrypcie importu. Moja aplikacja nie potrzebuje żadnego wsparcia poza importem (i prawdopodobnie kiedyś eksportem). Odkryłem, że spyc, wymieniony jako „kolejny parser YAML”, był rozwiązaniem jednym kliknięciem. Wrzuciłem jeden skrypt do folderu skryptów, dołączyłem go i wywołałem jedną metodę. Nie ma nic prostszego, a teraz wracam do pracy - usunięto blokadę.
Erick Robertson,
1
Nieaktualne i wiele niepoprawnie parsowanych plików yaml (niektóre dane są tracone).
ViliusL
7

Symfony2 ma komponent YAML, który obsługuje większość specyfikacji YAML 1.2

https://github.com/symfony/Yaml

Shane
źródło
To dobra odpowiedź, ponieważ parser Symfony2 YAML nie jest przestarzały. sfYamlnp. jest.
ferdynator
3

Jeśli używasz dużo YAML w swoim projekcie, może się okazać, że czyste biblioteki PHP, takie jak spyc lub Symfony YAML, nie są wystarczająco szybkie. Istnieją co najmniej dwa powiązania PHP dla parserów C YAML:

  • yaml - opakowanie dla biblioteki parsera LibYAML YAML 1.1
  • syck - opakowanie dla biblioteki parsera Syck YAML 1.0
bd808
źródło
2

Spróbuj sfYaml , to najlepsze, co znam.

Symfony i Doctrine ORM używają tego.

Aby go zdobyć, możesz pobrać Doctrine 1.2 i wypakować sfYamlzvendor katalogu.

Daj nam znać, jeśli odpowiada Twoim potrzebom.

takeshin
źródło