この記事では、php のassert と eval について詳しく紹介 (コード例) しています。一定の参考値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
assert 式が true かどうかを判断します。 true または false を返します。
<?php $s = 123; assert("is_int($s)"); ?>
この例から、文字列パラメータが実行されることがわかります。これは eval() と同様です。
ただし、 eval($code_str) は、PHP コーディング仕様に準拠した $code_str のみを実行します。
eval(): この関数は、後で計算するためにデータベースのテキスト フィールドにコードを保存する場合に便利です。 (運用環境では、less を使用することも推奨されます)
注: 1. eval() は文字列である必要があります;
2. 一重引用符は解析できないため、eval() の引用符は二重引用符である必要があります文字列内の変数 $str;
eval の定義と使用法:
(1)eval() 関数は、PHP コードに従って文字列を計算します (計算 = 実行)。
(2)文字列は正当な PHP コードである必要があり、セミコロンで終わる必要があります。
(3) コード文字列内で return 文が呼び出されていない場合は、NULL が返されます。コードに解析エラーがある場合、eval() 関数は false を返します
assert の使用法はもう少し詳しく説明します。
assert_option() は、assert() にいくつかの制約と制御を課すために使用できます。
デフォルト値
ASSERT_ACTIVE=1 //アサート関数スイッチ
ASSERT_WARNING =1 //式が false の場合、警告エラー メッセージを出力するかどうか、失敗したアサーションごとに PHP 警告を発行するかどうか
ASSERT_BAIL= 0 //実行を終了するかどうか、失敗したアサーションで実行を終了する
ASSERT_QUIET_EVAL= 0 //かどうか式の実行時にエラー プロンプトをオフにする; アサーション式の評価中に error_reporting を無効にする
ASSERT_CALLBACK= (NULL) // 失敗したアサーションを呼び出すコールバック関数ユーザー関数を開始するかどうか
php の公式ドキュメントは次のとおりです。デバッグにはassert を使用することが推奨されており、デバッグを有効にするかどうかを制御するために使用できるスイッチ ASSERT_ACTIVE もあります。
ここで疑問が生じますが、プログラマが開発中にコード内に大量のassert()を残し、プログラムのリリース時に実行をオフにしてassert_options(ASSERT_ACTIVE,0);を設定した場合、これは実現可能でしょうか?セキュリティ上の問題はありますか?
assert の主な機能はデバッグであるため、プログラムのリリース時には保持しないでください。プログラム内の式を判断するためにassertを使用するのは賢明ではありません。理由は前述の通りです。1つは実稼動環境ではassertが無効になっている可能性があるため、assertを完全に信頼できないこと、もう1つはassert()が実行され続ける可能性があることです。 ; そして、本番環境で ASSERT_ACTIVE=1 が設定されている場合、この式文字列が実行される可能性がありますが、これ自体にセキュリティ リスクがあります。 assert によるコード インジェクション
例
<?php function fo(){ $fp = fopen("c:/test.php",'w'); fwrite($fp,"123"); fclose($fp); return true; } assert("fo()"); ?>
注:assert は文字列パラメータ全体を PHP コードとして実行し、eval は正当な PHP コードを実行します。
以上がPHPでのassertとevalの詳細な紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。