亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何捕獲 php eval() 中的解析錯誤?

如何捕獲 php eval() 中的解析錯誤?

PHP
撒科打諢 2023-09-22 16:54:16
我想使用 php eval() 來識別潛在的解析錯誤。我知道評估的危險,但這是一個非常有限的用途,將事先進行充分驗證。我相信在 php 7 中我們應該能夠捕獲解析錯誤,但它不起作用。這是一個例子:  $one = "hello";  $two = " world";  $three = '';  $cmdstr = '$three = $one . $tw;';  try {     $result = eval($cmdstr); } catch (ParseError $e) {     echo 'error: ' . $e; }echo $three;我試圖在此處引發解析錯誤,看看是否可以捕獲它,但是當我運行它時,錯誤(未定義的變量 tw)會像通常那樣出現。它沒有被抓住。有什么想法如何從 eval 捕獲解析錯誤嗎?
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

您的代碼無法按預期工作,因為在 PHP 中,未定義的變量不會觸發解析錯誤,而是會觸發通知。感謝set_error_handler本機函數,您可以將通知轉換為錯誤,然后使用以下 PHP 7 代碼捕獲它:

<?php


set_error_handler(function($_errno, $errstr) {

? ? // Convert notice, warning, etc. to error.

? ? throw new Error($errstr);

});


$one = "hello";

$two = " world";

$three = '';

$cmdstr = '$three = $one . $tw;';


try {

? ? $result = eval($cmdstr);

} catch (Throwable $e) {

? ? echo $e; // Error: Undefined variable: tw...

}


echo $three;


查看完整回答
反對 回復 2023-09-22
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您的 PHP 代碼會拋出“Notice”類型的錯誤,并且這些錯誤無法由 try..catch 塊處理。您必須使用 PHP 的set_error_handler方法來使用自己的錯誤處理程序。閱讀該文檔,您就會明白該怎么做。如果您想要一個如何操作的示例,那么:


<?php


function myErrorHandler($errno, $errstr)

{

? ? switch ($errno) {

? ? ? ? case E_USER_ERROR:

? ? ? ? ? ? die("User Error");

? ? ? ? ? ? break;

? ? ? ? default:

? ? ? ? ? ? die("Your own error");

? ? ? ? ? ? break;

? ? }


? ? /* Don't execute PHP internal error handler */

? ? return true;

}


$err = set_error_handler("myErrorhandler");


$one = "hello";

$two = " world";

$three = '';

$cmdstr = '$three = $one . $tw;';


$result = eval($cmdstr);


echo $three;


?>


查看完整回答
反對 回復 2023-09-22
  • 2 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號