1

cron のように動作するデーモンを作成しました。

そのデーモンは、すべてのモジュール ページで「modulename.cron.php」というファイルを検索し、eval().

私の問題は、何らかのエラーが発生した場合、デーモンを停止したくないということです。(ステータス==「エラー」の場合にデーモンを再起動するウォッチドッグがすでにあり、クライアントがページを要求するたびにCMS / CMFでウォッチドッグがトリガーされます)

なぜ私はこれをしたくないのですか?
ハッキングの試みを防ぎ、バグをより早く修正し、エラーが発生したときにメールを送信するプラグインを作成したくありません

私の悪い英語でごめんなさい

編集:

このサイトを使用eval()してコードを実行し、試してみると、それが機能することがわかります。方法がわかりません:

http://writecodeonline.com/php/

私はすでに試しまし@eval($code) OR error_handler_function_here($code)たが、うまくいきません!

4

3 に答える 3

2

ドキュメントからeval

set_error_handler() を使用して eval() で解析エラーをキャッチすることはできません。

同じページのコメントに「防弾」評価の提案があります。http://www.php.net/manual/en/function.eval.php#103360をご覧ください。

于 2011-06-24T16:04:46.847 に答える
0

「プログラムを壊す」問題を解決することは難しくありません。

最初にテストとしてコードを実行します...つまり、

$file='/tmp/'.rand(0,99999);
/*private eyes*/
touch($file);
chmod($file,600);
/*save to a temp file*/
$fp=fopen($file,'w');
fwrite($fp,'<?php eval("'.str_replace('"',"\\\"",$code).'");?>');
fclose($fp);
/* redirect stderr to stdout and execute */
$result=`php -q $file 2>&1`;
unlink($file);
if (stristr($result,'fatal')) {
 /* no breaky */
 echo 'If I run that code it may will maybe possibly definitely cause me to break.';
} else {
 /* ok, probably */
 echo eval($code);
}

(しかし、ローカル以外のユーザーから eval() にコードをフィードするべきではありません。それがあなたの乗り方である場合を除きます。)

于 2014-03-07T06:43:32.913 に答える