[PHP] php中的eval函數(shù)

<u></u>eval函數(shù)會(huì)把字符串按照php代碼來執(zhí)行。

如果字符串是合法的php腳本,
eval會(huì)返回字符串中return的值,
如果字符串中沒有return,則返回null。

如果字符串中的php腳本語法錯(cuò)誤,
則會(huì)產(chǎn)生Parse error錯(cuò)誤,
<u></u>eval會(huì)返回false。

通過eval與錯(cuò)誤抑制符@聯(lián)合使用,可以判斷給定php腳本是否具有語法錯(cuò)誤。

注意:
<u></u>php_check_syntax也是用來判斷語法錯(cuò)誤的,只不過被廢棄了。

function checkSyntax($fileRelativePath){        
    $fileContent=file_get_contents($fileRelativePath);
    
    $isSyntaxOk=@eval(sprintf(
        "return true;?>%s<?php",
        $fileContent
    ));
    
    return $isSyntaxOk;
}

注意:
(1)return true;是為了讓eval在腳本語法合法的情況下返回true
(2)?><?php是為了保證$fileContent中開頭和結(jié)尾的html不被解析為php。但是,這種用法在php5.3.26中不能解析,必須把<?php?>去掉才可以。
(3)@eval會(huì)求值參數(shù)字符串,并抑制錯(cuò)誤信息。
(4)雖然eval執(zhí)行的字符串首先return true;了,但是其中的function還是會(huì)被加載到全局空間中的。而且,eval無法定位到語法出錯(cuò)的位置,所以,后來改用了register_shutdown_function

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PHP代碼執(zhí)行函數(shù) eval & assert & preg_replace eval 函數(shù) php官方手冊(cè):ht...
    xaviershun閱讀 5,297評(píng)論 1 12
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,663評(píng)論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評(píng)論 19 139
  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,751評(píng)論 0 6
  • iOS 友盟第三方登錄分享
    Hollylord閱讀 1,524評(píng)論 0 13

友情鏈接更多精彩內(nèi)容