Trình phân tích cú pháp YAML PHP [đã đóng]


105

Có ai biết về một trình phân tích cú pháp YAML tốt cho PHP không? Nếu vậy, ưu và nhược điểm của thư viện này là gì?


thử "spyc" lib spyc.sourceforge.net
Shreef

16
1 mặc dù không mang tính xây dựng, trang này là cực kỳ hữu ích cho tôi
Erick Robertson

2
xem xét chất lượng của câu trả lời được bình chọn cao nhất cho câu hỏi này, thật đáng ngạc nhiên là câu hỏi này được đóng lại là "không mang tính xây dựng".
dreftymac

Tôi vừa phát hành trình phân tích cú pháp của mình cho BabyYaml, một người anh em họ đơn giản hơn của Yaml, nếu bạn quan tâm, hãy xem tại đây: github.com/lingtalfi/BabyYaml
ling

Tôi phải đồng ý với ErickRobertson và dreftymac, điều này thực sự đã trả lời tốt câu hỏi của tôi, và việc đóng nó đã ngăn cản những câu trả lời tốt có thể có.
Pharaoh Tools

Câu trả lời:


139

Cập nhật lần cuối : ngày 26 tháng 7 năm 2017

Dưới đây là tóm tắt về trạng thái của YAML trong PHP:

  • Wrappers vào thư viện C: Bạn có thể muốn những thứ này nếu bạn cần tốc độ tuyệt đối:
  • Triển khai PHP thuần túy:

    • sfYaml : Thành phần YAML của Symfony. Bạn có thể xem động lực của các tác giả của nó ở đây . Anh ấy muốn thứ gì đó " dễ sử dụng, nhanh chóng, được kiểm tra đơn vị và có thông báo lỗi rõ ràng ."
    • spyc : Trình phân tích cú pháp YAML không có phụ thuộc

Tại thời điểm viết bài này, ngày phát hành phiên bản mới nhất cho các thư viện nói trên và các phiên bản của thông số kỹ thuật YAML (1.2 là phiên bản mới nhất) mà chúng hỗ trợ là:

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
Có những thư viện khác ít được biết đến hơn (như thư viện này , từ dự án Horde), nhưng tôi không muốn đi sâu vào những thứ này.
NullUserException,

3
Tôi đã sử dụng sfYaml trong khoảng hai năm và trong một bài kiểm tra hiệu suất, tôi nhận ra rằng sfYaml :: parse () chiếm hầu hết thời gian xử lý. Tôi đã thay thế nó bằng php-yaml và ứng dụng hiện nhanh hơn 70%! Đó là một sự khác biệt rất lớn.
Attila Fulop

1
Bản cập nhật 2019 cho PHP: "spyc" có quá nhiều vấn đề, trong khi "sfYaml" hoạt động tốt.
ViliusL

49

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

Triển khai PHP thuần túy, vì vậy bạn không cần thực hiện bất kỳ sửa đổi nào đối với máy chủ để cài đặt. Nếu tốc độ là mối quan tâm nghiêm trọng, nó có thể không phải là giải pháp lý tưởng, nhưng nếu bạn đang sử dụng YAML cho các cấu hình hoặc sử dụng với khối lượng tương đối thấp, thì đó là một giải pháp tuyệt vời.

Với một tài liệu YAML, Spyc sẽ trả về một mảng mà bạn có thể sử dụng theo cách nào bạn thấy phù hợp.

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

Cho một mảng, Spyc sẽ trả về một chuỗi chứa tài liệu YAML được xây dựng từ dữ liệu của bạn.

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

1
+1 Tôi chỉ muốn một cách nhanh chóng và dễ dàng để sử dụng YAML trong tập lệnh nhập. Ứng dụng của tôi không cần bất kỳ hỗ trợ nào ngoài nhập khẩu (và có thể một ngày nào đó sẽ xuất khẩu). Tôi thấy rằng spyc, được liệt kê là "một trình phân tích cú pháp YAML khác" là một giải pháp chỉ với 1 cú nhấp chuột. Tôi đã thả một tập lệnh vào thư mục tập lệnh của mình, bao gồm nó và gọi một phương thức. Nó không dễ dàng hơn thế, và bây giờ tôi sẽ quay lại làm việc - đã loại bỏ rào cản.
Erick Robertson

1
Lỗi thời và nhiều tệp phân tích cú pháp yaml không chính xác (một số dữ liệu bị mất).
ViliusL


7

Symfony2 có một thành phần YAML hỗ trợ hầu hết các thông số kỹ thuật YAML 1.2

https://github.com/symfony/Yaml


Đây là một câu trả lời tốt vì trình phân tích cú pháp Symfony2 YAML không lỗi thời. sfYamlví dụ là.
ferdynator

3

Nếu đang sử dụng nhiều YAML trong dự án của mình, bạn có thể thấy rằng các thư viện PHP thuần như spyc hoặc Symfony YAML không đủ nhanh. Có ít nhất hai liên kết PHP cho trình phân tích cú pháp C YAML:

  • yaml - một trình bao bọc cho thư viện phân tích cú pháp LibYAML YAML 1.1
  • syck - một trình bao bọc cho thư viện phân tích cú pháp Syck YAML 1.0


2

Hãy thử sfYaml , nó là tốt nhất mà tôi biết.

Symfony và Doctrine ORM đang sử dụng cái này.

Để có được nó, bạn có thể Tải xuống Doctrine 1.2 và giải nén sfYamltừ vendorthư mục.

Hãy cho chúng tôi biết nếu nó phù hợp với nhu cầu của bạn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.