PHP YAML Parsers [закрыто]


105

Кто-нибудь знает о хорошем парсере YAML для PHP? Если да, то каковы плюсы и минусы этой библиотеки?


попробуйте "spyc" lib spyc.sourceforge.net
Shreef

16
+1 хоть и неконструктивная, но эта страница была для меня чрезвычайно полезной
Эрик Робертсон

2
учитывая качество ответа, получившего наибольшее количество голосов на этот вопрос, удивительно, что этот вопрос был закрыт как «неконструктивный».
dreftymac 08

Я только что выпустил свой парсер BabyYaml, который является более простым двоюродным братом Yaml, если вам интересно, посмотрите его здесь: github.com/lingtalfi/BabyYaml
ling

Я должен согласиться с Эриком Робертсоном и dreftymac, это буквально хорошо ответило на мой вопрос, и закрытие его предотвратило дальнейшие возможные хорошие ответы.
Pharaoh Tools

Ответы:


139

Последнее изменение : 26 июля 2017 г.

Вот краткое изложение состояния YAML в PHP:

  • Обертки для библиотек C: они вам, вероятно, понадобятся, если вам нужна чистая скорость:
    • php-yaml : оболочка для LibYAML . Доступен как расширение PECL; он также есть в документации по PHP .
    • syck : привязка к syck; также доступно как расширение PECL. (датировано, см. ниже)

  • Реализации на чистом PHP:

    • sfYaml : YAML-компонент Symfony. Мотивацию авторов вы можете увидеть здесь . Он хотел что-то, что было бы « простым в использовании, быстрым, модульным и с четкими сообщениями об ошибках ».
    • spyc : парсер YAML без зависимостей

На момент написания этой статьи даты выпуска последних версий для вышеупомянутых библиотек и поддерживаемых ими версий спецификации YAML (1.2 - последняя версия):

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
Есть и другие менее известные библиотеки (например, эта из проекта Horde), но я не хотел вдаваться в подробности.
NullUserException

3
Я использую sfYaml около двух лет, и во время теста производительности я понял, что sfYaml :: parse () занимает большую часть времени обработки. Я заменил его на php-yaml, и теперь приложение работает на 70% быстрее! Это огромная разница.
Аттила Фулоп,

1
Обновление 2019 для PHP: у spyc очень много проблем, а у sfYaml работает нормально.
ViliusL

49

Шпион: https://github.com/mustangostang/spyc

Чистая реализация PHP, поэтому вам не нужно вносить какие-либо изменения в сервер для установки. Если скорость вызывает серьезную озабоченность, это может быть не идеальное решение, но если вы используете YAML для конфигураций или относительно небольшого объема, это фантастическое решение.

Учитывая документ YAML, Spyc вернет массив, который вы можете использовать по своему усмотрению.

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

Учитывая массив, Spyc вернет строку, содержащую документ YAML, созданный на основе ваших данных.

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

1
+1 Мне просто нужен был быстрый и простой способ использовать YAML в скрипте импорта. Мое приложение не требует поддержки, кроме импорта (и, возможно, когда-нибудь экспорта). Я обнаружил, что spyc, указанный как «еще один анализатор YAML», был решением в один клик. Я бросил один сценарий в папку со сценариями, включил его и вызвал один метод. Легче не бывает, и теперь я возвращаюсь к работе - препятствие снято.
Эрик Робертсон

1
Устаревшие и многие файлы yaml разбираются неправильно (некоторые данные теряются).
ViliusL


7

Symfony2 имеет компонент YAML, который поддерживает большую часть спецификации YAML 1.2.

https://github.com/symfony/Yaml


Это хороший ответ, потому что парсер Symfony2 YAML не устарел. sfYamlнапример есть.
ferdynator 01

3

Если вы используете много YAML в своем проекте, вы можете обнаружить, что чистые библиотеки PHP, такие как spyc или Symfony YAML, недостаточно быстры. Для парсеров C YAML существует как минимум две привязки PHP:

  • yaml - обертка для библиотеки парсера LibYAML YAML 1.1
  • syck - обертка для библиотеки парсера Syck YAML 1.0


2

Попробуйте sfYaml , это лучшее что я знаю.

Symfony и Doctrine ORM используют его.

Чтобы получить его, вы можете скачать Doctrine 1.2 и извлечь sfYamlиз vendorкаталога.

Сообщите нам, если это соответствует вашим потребностям.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.