2011-11-15 7 views
7

これは少し長いショットですが、私はとにかく尋ねると思いました。私はGithub上でACEエディタを使って見つけるように、Webベースのコード編集を持つアプリケーションを持っています。問題は、アプリケーション自体の中にあるコードを編集することが可能であることです。致命的なエラーのためのPHPテスト

ファイルを保存する前に解析エラーを検出することができました。これはうまくいきますが、ユーザがMyClass extends NonExistentClassなどのランタイムエラーを作成した場合、ファイルは解析チェックをパスしますが、ファイルシステムに保存され、

ファイルシステムに保存する前に新しいコードでランタイムエラーが発生するかどうかテストする方法はありますか?完全に直感的ではないようだが、私は尋ねると思った。

+0

ワウ。これは私がこのサイトでしばらく見てきた最良の質問の1つです。私は自分自身の答えを楽しみにしています。たぶん 'eval()'チェックの価値があります。 –

答えて

2

おそらくregister_shutdown_functionを使用して、致命的なエラーに関する情報を含むJSONオブジェクトを構築してください。次に、AJAX呼び出しを使用してファイルをテストします。呼び出しからの戻り値を解析して、エラーがあるかどうかを調べます。

{"type":1,"message":"Fatal error message","line":1} 

前に付加などの

function my_shutdown() { 
    $error = error_get_last(); 
    if($error['type'] == 1) { 
     echo json_encode($error); 
    } 
} 
register_shutdown_function('my_shutdown'); 

ウィル出力に何かを(もちろん、あなたはまた、単にUXの観点から最善であるものについて考え、PHPファイルを実行し、AJAXを使用せずにJSONオブジェクトを解析できます)テストファイルの最初にそれを書いてください。

+0

それを愛する。ありがとう。 – UncleCheese

+0

テストされていないので、それがうまくいくかどうかは保証されていません。 – andrewtweber

0

おそらく別のファイルでコードを実行し、そのコードが評価されているかどうかを確認するために下に固定コードを添付しますか?

2

おそらく有用:php -f <file>は、実行時エラーがある場合はゼロ以外の終了コードを返します。