PHP YAML Parsers [ปิด]


105

มีใครรู้จัก YAML Parser ที่ดีสำหรับ PHP บ้าง? ถ้าเป็นเช่นนั้นข้อดีข้อเสียของห้องสมุดนี้คืออะไร?


ลองใช้ lib spyc.sourceforge.net
Shreef

16
+1 แม้ว่าจะไม่สร้างสรรค์ แต่หน้านี้ก็มีประโยชน์อย่างยิ่งสำหรับฉัน
Erick Robertson

2
เมื่อพิจารณาถึงคุณภาพของคำตอบที่ได้รับการโหวตสูงสุดสำหรับคำถามนี้เป็นที่น่าประหลาดใจที่คำถามนี้ถูกปิดว่า "ไม่สร้างสรรค์"
dreftymac

ฉันเพิ่งเปิดตัว parser ของ BabyYaml ซึ่งเป็นลูกพี่ลูกน้องที่เรียบง่ายกว่าของ Yaml หากคุณสนใจลองดูที่นี่: github.com/lingtalfi/BabyYaml
ลิง

ฉันต้องเห็นด้วยกับ ErickRobertson และ dreftymac สิ่งนี้ตอบคำถามของฉันได้ดีและการปิดมันทำให้คำตอบที่ดีเป็นไปได้เพิ่มเติม
Pharaoh Tools

คำตอบ:


139

อัปเดตล่าสุด : 26 กรกฎาคม 2560

นี่คือสรุปสถานะของ YAML ใน PHP:

  • ห่อไปยังไลบรารี C: คุณอาจต้องการสิ่งเหล่านี้หากคุณต้องการความเร็วที่แท้จริง:
    • PHP-yaml : Wrapper สำหรับ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%! นั่นคือความแตกต่างอย่างมาก
Attila Fulop

1
การอัปเดต PHP ปี 2019: "spyc" มีปัญหามากมายในขณะที่ "sfYaml" ทำงานได้ดี
ViliusL

49

Spyc: 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 อื่น" เป็นวิธีแก้ปัญหาในคลิกเดียว ฉันทิ้งสคริปต์เดียวลงในโฟลเดอร์สคริปต์ของฉันรวมไว้และเรียกวิธีการเดียว มันไม่ได้ง่ายไปกว่านั้นและตอนนี้ฉันกำลังจะกลับไปทำงาน - นำสิ่งกีดขวางออก
Erick Robertson

1
ล้าสมัยและไฟล์ yaml แยกวิเคราะห์จำนวนมากไม่ถูกต้อง (ข้อมูลบางส่วนสูญหาย)
ViliusL


7

Symfony2 มีส่วนประกอบ YAML ซึ่งรองรับข้อมูลจำเพาะ YAML 1.2 ส่วนใหญ่

https://github.com/symfony/Yaml


นี่เป็นคำตอบที่ดีเนื่องจากโปรแกรมแยกวิเคราะห์ Symfony2 YAML ไม่ล้าสมัย sfYamlเช่นคือ
ferdynator

3

หากคุณใช้ YAML จำนวนมากในโปรเจ็กต์ของคุณคุณอาจพบว่าไลบรารี PHP แท้เช่น spyc หรือ Symfony YAML นั้นไม่เร็วพอ มีการผูก PHP อย่างน้อยสองตัวสำหรับตัวแยกวิเคราะห์ C YAML:

  • yaml - wrapper สำหรับไลบรารีตัวแยกวิเคราะห์ LibYAML YAML 1.1
  • syck - wrapper สำหรับไลบรารีตัวแยกวิเคราะห์ Syck YAML 1.0


2

ลองsfYamlดีที่สุดที่ฉันรู้

Symfony และ Doctrine ORM กำลังใช้อันนี้

คุณสามารถดาวน์โหลด Doctrine 1.2และแยกsfYamlจากvendorไดเร็กทอรี

แจ้งให้เราทราบหากเหมาะสมกับความต้องการของคุณ


2

หากคุณต้องการที่จะทดสอบ YAML คุณได้อย่างรวดเร็วฉันสร้าง: http://yaml-online-parser.appspot.com/ ช่วยให้ฉันเขียน YAML โดยเฉพาะในขณะที่เพิ่งเรียนรู้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.