function isEval()
{
foreach(array_reverse(debug_backtrace()) as $v) {
return $v['function'] === 'eval';
}
}
function isEval() { // updated by code90
foreach(array_reverse(debug_backtrace()) as $v) {
if($v['function'] === 'eval') return true;
}
return false; }
function myFunc()
{
return isEval() ? "is eval\n" : "is not eval\n";
}
function callAnotherFunction()
{
return myFunc();
}
function myFunctionWithEval()
{
eval('$return = myFunc();');
return $return;
}
テスト
echo "myFunc() without eval: " . myFunc();
eval("echo 'myFunc() whit eval: ' . myFunc();");
echo "callAnotherFunction() without eval: " . callAnotherFunction();
eval("echo 'callAnotherFunction() with eval: ' . callAnotherFunction();");
echo 'myFunctionWithEval() with eval: ' . myFunctionWithEval();
出力
myFunc() without eval: is not eval
myFunc() whit eval: is eval
callAnotherFunction() without eval: is not eval
callAnotherFunction() with eval: is eval
myFunctionWithEval() with eval: is not eval <--- PROBLEM!
myFunctionWithEval myFunc を eval で呼び出します。eval が呼び出された時期を保証することはできません。偽陽性を与える可能性があります。
別の進め方を考えるべきです。この方法は使用しないでください。
別の方法ですが、常に使用しないことをお勧めします。
function isEval()
{
return isset($GLOBALS['__MyEval']) && $GLOBALS['__MyEval'] === true;
}
function myFunc()
{
return isEval() ? "is eval\n" : "is not eval\n";
}
function myFunctionWithEval()
{
$GLOBALS['__MyEval'] = true;
eval('$return = myFunc();');
$GLOBALS['__MyEval'] = null;
return $return;
}
echo "myFunctionWithEval() with eval: " . myFunctionWithEval();