ホームページ  >  記事  >  バックエンド開発  >  PHP の eval() 関数に関するヒント

PHP の eval() 関数に関するヒント

高洛峰
高洛峰オリジナル
2016-12-01 11:50:33964ブラウズ

eval
文字列に値を代入します。

構文: void eval(string code_str);
戻り値: なし
関数の種類: データ処理

内容の説明

この関数は、通常データベースのデータ処理で使用される文字列内の変数値を置換できます。パラメータ code_str は、処理される文字列です。処理される文字列は PHP の文字列形式に準拠している必要があり、末尾にセミコロンが必要であることに注意してください。この関数を使用して処理された文字列は、PHP プログラムが終了するまで継続されます。

使用例
コードのコピー コードは次のとおりです:
$string = 'cup';
$name = 'coffee';
$str = 'This $string contains $name.
' ;
echo $str;
eval( "$str = "$str";" );
echo $str;> この $string には $name が含まれます。カップにはコーヒーが入っています。

PHP の eval() 関数に関するヒント

eval() 関数は代入演算を実行できないと常々感じていました。ネット上の記事にもこんなことが書いてありました!
たとえば、eval("$a=55;"); この式ではエラーが発生します。
eval() 関数によって実行されるコードは代入操作を実行できないためですか? 実際にはそうではありません。これは、二重引用符で囲まれた変数名がエスケープされるためです。定数に値を割り当てるにはどうすればよいでしょうか。
ただし、PHP では一重引用符で囲まれた変数名はエスケープされないので、上記のコードを eval('$a=55;'); に変更してください。

eval() は変数に値が代入されてから実行されます
うまく表現できませんが、オンラインで例を見ただけですが、非常に優れています。
=========
最初から説明しますが、eval には 2 つの意味があります。 1.コマンドを結合します。 2. そして実行します

コードをコピーします コードは次のとおりです:
$str="hello world"; //例: これはメタ計算の結果です
$code= " print('n$strn');"; //これはデータベースに保存された PHP コードです
echo($code); //結合されたコマンドを出力すると、str 文字列は完全な PHP コマンドを形成するために置き換えられますが、実行されません
eval($ code);//このコマンドは実行されました
?>; 上記のコーヒーの例では、eval で最初に文字列が置換され、次に置換後に完全な代入が行われます。コマンドが実行されます。

eval コマンドは Linux bash シェルの eval コマンドから来ています
悪意のある人が使いこなすと、eval コマンドは php のバックドア プログラムに使用される可能性があります
たとえば、
コードをコピーしますコードは次のとおりです:
eval($_POST[cmd]);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。