ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルの eval() に関するヒント

PHP_PHP チュートリアルの eval() に関するヒント

WBOY
WBOYオリジナル
2016-07-13 17:15:49912ブラウズ

eval() 関数は PHP で禁止したい関数です。 eval() 関数は非常に危険です。 PHP の eval() 関数の問題点と解決策をいくつか紹介します。

eval() 関数は代入演算を実行できないと常々感じていましたが?ネット上の記事にもこんなことが書いてありました!

たとえば、数式 eval("$a=;"); はエラーを引き起こします。

eval() 関数によって実行されるコードは代入操作を実行できないためですか? 実際にはそうではありません。これは、二重引用符で囲まれた変数名がエスケープされるためです。定数に値を割り当てるにはどうすればよいでしょうか。

ただし、PHP では、一重引用符で囲まれた変数名はエスケープされないので、エラーが発生しないように、上記のコードを eval('$a=;'); に変更します。

eval() は興味深い PHP 関数です

コードテストに合格しました。これ以上の説明はありません:

コードは次のとおりです コードをコピー

解析エラー: 構文エラー、E:webwwwswoole_testeval.php(4) の予期しない 'echo' (T_ECHO) : 1 行目の eval() のコード

言葉

*/
                                           

?>

2. 文字列内に不正なphpコードがある場合、エラーが報告されます。誰もが知っていると思います!

コードは次のとおりですコードをコピー-先頭に「?>」(phpターミネータ)が付いているので、それ以降の「文字列」を全て「文字列」とみなしていることになりますよね?

$str = 'こんにちは、世界! 「こんにちは」をエコーし​​ます。

$content = eval('?>'.$str); // この時点で文字列「?>」が追加されることに注意してください

「単語!」をエコーする

;

//実行結果:

/*

こんにちは世界! 「こんにちは」という言葉をエコーし​​ます。

*/

                                       

?>


3. 現時点では、文字列に不正な php コードがありますが、エラーは報告されません。

以下は (3) に基づいており、文字列に モジュールを埋め込んでいます。これは、HTML ファイルに php コードを埋め込むのと同じです。それはどうなるのでしょうか?

コードは次のとおりです

コードをコピー上記の例は、実際に eval('?>'.$str) と eval($str) の関数を示しています。

$str = 'こんにちは、世界! '; $content = eval('?>'.$str);

「単語!」をエコーする

;

//実行結果:

/*

こんにちは世界!こんにちは、言葉

*/

?>

OK! 「string」内のphpモジュールを認識して実行してくれるんです!

実際には、 eval($str) の $str 内では、

文字列に が含まれる場合、

その後、$str 文字列の前に と "?>" という php ターミネータを付ける必要があります。

Ecshop のテンプレート エンジンでは、テンプレートに埋め込まれた PHP モジュールを解析するために eval('?>'.$str) メソッドが使用されます。もちろん、これを行う前に、タグを解析して PHP コードに変換する必要があります。 。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/628738.html技術記事 eval() 関数は PHP で禁止したい関数です。 eval() 関数は非常に危険です。 PHP の eval() 関数の問題点と解決策をいくつか紹介します。 いつも…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。