eval() 関数は PHP で禁止したい関数です。 eval() 関数は非常に危険です。 PHP の eval() 関数の問題点と解決策をいくつか紹介します。
eval() 関数は代入演算を実行できないと常々感じていましたが?ネット上の記事にもこんなことが書いてありました!
たとえば、数式 eval("$a=;"); はエラーを引き起こします。
eval() 関数によって実行されるコードは代入操作を実行できないためですか? 実際にはそうではありません。これは、二重引用符で囲まれた変数名がエスケープされるためです。定数に値を割り当てるにはどうすればよいでしょうか。
ただし、PHP では、一重引用符で囲まれた変数名はエスケープされないので、エラーが発生しないように、上記のコードを eval('$a=;'); に変更します。
eval() は興味深い PHP 関数です
コードテストに合格しました。これ以上の説明はありません:
コードは次のとおりです | コードをコピー |
解析エラー: 構文エラー、E:webwwwswoole_testeval.php(4) の予期しない 'echo' (T_ECHO) : 1 行目の eval() のコード 言葉 */
|
コードをコピー | |
$str = 'こんにちは、世界! 「こんにちは」をエコーします。 $content = eval('?>'.$str); // この時点で文字列「?>」が追加されることに注意してください 「単語!」をエコーする ;//実行結果: /* こんにちは世界! 「こんにちは」という言葉をエコーします。 */?>
3. 現時点では、文字列に不正な php コードがありますが、エラーは報告されません。 |
以下は (3) に基づいており、文字列に モジュールを埋め込んでいます。これは、HTML ファイルに php コードを埋め込むのと同じです。それはどうなるのでしょうか?
コードは次のとおりです
$str = 'こんにちは、世界! '; $content = eval('?>'.$str); 「単語!」をエコーする ;//実行結果: /* こんにちは世界!こんにちは、言葉 !*/ ?>
OK! 「string」内のphpモジュールを認識して実行してくれるんです!
|
実際には、 eval($str) の $str 内では、
文字列に が含まれる場合、
その後、$str 文字列の前に と "?>" という php ターミネータを付ける必要があります。
Ecshop のテンプレート エンジンでは、テンプレートに埋め込まれた PHP モジュールを解析するために eval('?>'.$str) メソッドが使用されます。もちろん、これを行う前に、タグを解析して PHP コードに変換する必要があります。 。