Pengurai YAML PHP [ditutup]

105

Apakah ada yang tahu tentang Parser YAML yang bagus untuk PHP? Jika ya, apa pro dan kontra dari perpustakaan ini?

sgibbons.dll
sumber
coba "spyc" lib spyc.sourceforge.net
Shreef
16
+1 meskipun tidak konstruktif, laman ini sangat membantu saya
Erick Robertson
2
mengingat kualitas jawaban yang paling banyak dipilih untuk pertanyaan ini, sungguh mengherankan bahwa pertanyaan ini ditutup sebagai "tidak konstruktif".
dreftymac
Saya baru saja merilis parser BabyYaml saya, yang merupakan sepupu sederhana Yaml, jika Anda tertarik lihat di sini: github.com/lingtalfi/BabyYaml
ling
Saya harus setuju dengan ErickRobertson dan dreftymac ini benar-benar menjawab pertanyaan saya dengan baik, dan menutupnya telah mencegah kemungkinan jawaban yang lebih baik.
Pharaoh Tools

Jawaban:

139

Terakhir diperbarui : 26 Juli 2017

Berikut ringkasan status YAML dalam PHP:

  • Pembungkus ke pustaka C: Anda mungkin menginginkan ini jika Anda membutuhkan kecepatan:
    • php-yaml : Pembungkus untuk LibYAML . Tersedia sebagai ekstensi PECL; itu juga yang ada di dokumen PHP .
    • syck : Mengikat ke syck; juga tersedia sebagai ekstensi PECL. (tertanggal, lihat di bawah)

  • Implementasi PHP murni:

    • sfYaml : Komponen YAML Symfony. Anda bisa melihat motivasi penulisnya di sini . Dia menginginkan sesuatu yang " mudah digunakan, cepat, unit teruji dan memiliki pesan kesalahan yang jelas ."
    • spyc : pengurai YAML tanpa dependensi

Pada saat penulisan ini, tanggal rilis versi terbaru untuk pustaka yang disebutkan di atas dan versi spesifikasi YAML (1.2 adalah versi terbaru) yang mereka dukung adalah:

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
sumber
1
Ada perpustakaan lain yang kurang dikenal (seperti ini , dari proyek Horde), tetapi saya tidak ingin mendalami ini banyak.
NullUserException
3
Saya telah menggunakan sfYaml selama sekitar dua tahun, dan pada tes kinerja saya menyadari bahwa sfYaml :: parse () mengambil sebagian besar waktu pemrosesan. Saya menggantinya dengan php-yaml dan aplikasinya sekarang 70% lebih cepat! Itu perbedaan yang sangat besar.
Attila Fulop
1
Pembaruan 2019 untuk PHP: "spyc" memiliki banyak masalah, sementara "sfYaml" berfungsi dengan baik.
ViliusL
49

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

Implementasi PHP murni, jadi Anda tidak perlu melakukan modifikasi apa pun pada server untuk instalasi. Jika kecepatan sangat mengkhawatirkan, ini mungkin bukan solusi yang ideal, tetapi jika Anda menggunakan YAML untuk konfigurasi atau penggunaan volume yang relatif rendah, ini adalah solusi yang fantastis.

Dengan adanya dokumen YAML, Spyc akan mengembalikan larik yang dapat Anda gunakan sesuka Anda.

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

Diberikan sebuah array, Spyc akan mengembalikan string yang berisi dokumen YAML yang dibuat dari data Anda.

$yaml_str = Spyc::YAMLDump($myarray);
tenggelam
sumber
1
+1 Saya hanya ingin cara yang cepat dan mudah untuk menggunakan YAML dalam skrip impor. Aplikasi saya tidak memerlukan dukungan apa pun selain impor (dan mungkin suatu hari nanti akan diekspor). Saya menemukan bahwa spyc, terdaftar sebagai "pengurai YAML lain" adalah solusi 1-klik. Saya menjatuhkan satu skrip ke folder skrip saya, memasukkannya, dan memanggil satu metode. Tidak semudah itu, dan sekarang saya akan kembali bekerja - penghalang jalan dihapus.
Erick Robertson
1
File yaml kedaluwarsa dan banyak yang salah parse (beberapa data hilang).
ViliusL
7

Symfony2 memiliki komponen YAML yang paling mendukung besar spesifikasi YAML 1.2

https://github.com/symfony/Yaml

Shane
sumber
Ini adalah jawaban yang bagus karena parser Symfony2 YAML tidak ketinggalan jaman. sfYamlmisalnya adalah.
ferdynator
3

Jika Anda menggunakan banyak YAML dalam proyek Anda, Anda mungkin menemukan bahwa pustaka PHP murni seperti spyc atau Symfony YAML tidak cukup cepat. Setidaknya ada dua binding PHP untuk parser C YAML:

  • yaml - pembungkus untuk library parser LibYAML YAML 1.1
  • syck - pembungkus untuk library parser Syck YAML 1.0
bd808
sumber
2

Coba sfYaml , itu yang terbaik yang saya tahu.

Symfony dan Doctrine ORM menggunakan yang ini.

Untuk mendapatkannya, Anda dapat Download Doctrine 1.2 dan ekstrak sfYamldari vendordirektori.

Beri tahu kami jika itu sesuai dengan kebutuhan Anda.

takeshin
sumber
2

Jika Anda perlu menguji YAML Anda dengan cepat, saya membuat: http://yaml-online-parser.appspot.com/ . Ini membantu saya menulis YAML, terutama saat baru belajar.

Paul Tarjan
sumber