[PHP-users 34924] Re: syck_load関数のエラー処理に関して

Makoto Kuwata kwa @ kuwata-lab.com
2010年 1月 9日 (土) 18:39:16 JST


こんにちは、桑田といいます。

2009/12/22 岸本 弥生 <yayoi @ back-in-time.jp>:
> ここにポストするべきか悩ましいのですが、YAMLパーサのsyck拡張モジュールで
> ハマっています。
>
> 正常系は正しく機能しますが、YAMLファイルの書き方に誤りがあった場合
> syck_load()関数がSegmentation faultで終了してしまいます。
>
> 書式に誤りがある旨をユーザに通知する様、例外処理を書きたいですが、
> 書けずに困っています。

php_yaml を使ってみてはどうでしょうか。
参考
http://gihyo.jp/dev/serial/01/yaml_library/0004?page=2

libyaml 0.0.1, php_yaml 0.3.0, php 5.2.11 を使って手元で試したところ、
間違ったYAMLを読んでもsegmentation faultにはなりませんでした。

example.php:

   <?php
   if (! extension_loaded('yaml')) {
       dl('yaml.so') or die('cannot load yaml.so.');
   }

   $str = file_get_contents("example.yaml");
   $ydoc = yaml_parse($str);
   var_dump($ydoc);
   ?>

example.yaml(4行目にsyntax error):

   - name: Haruhi
     gender: F
     age: 16
   - name: "Kyon
     gender: M
     age: 16

実行結果:

   $ php example.php
   PHP Warning:  yaml_parse(): parser error in /tmp/example.php on line 7
   bool(false)

・・・とここまで書いて気づいたのですが、「YAMLファイルのどこが間違っているか」
という情報はphp_yamlではとってこれなさそうですね。残念。
お役に立てそうにない情報ですみません。

--
regards,
makoto kuwata


PHP-users メーリングリストの案内