溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何將php字符串轉(zhuǎn)為可執(zhí)行代碼

發(fā)布時(shí)間:2020-05-20 14:35:41 來源:億速云 閱讀:641 作者:鴿子 欄目:編程語言

                                                           如何將php字符串轉(zhuǎn)為可執(zhí)行代碼

php字符串轉(zhuǎn)成可執(zhí)行代碼

在php中將字符串轉(zhuǎn)為可執(zhí)行的代碼,可以通過使用php中的“eval()”函數(shù)來實(shí)現(xiàn)。

eval說明與用法

eval — 把字符串作為PHP代碼執(zhí)行

eval ( string $code ) : mixed

注:函數(shù)eval()語言結(jié)構(gòu)是 非常危險(xiǎn)的, 因?yàn)樗试S執(zhí)行任意 PHP 代碼。 它這樣用是很危險(xiǎn)的。 如果您仔細(xì)的確認(rèn)過,除了使用此結(jié)構(gòu)以外 別無方法, 請(qǐng)多加注意,不要允許傳入任何由用戶 提供的、未經(jīng)完整驗(yàn)證過的數(shù)據(jù) 。

eval參數(shù)

code:

需要被執(zhí)行的字符串

代碼不能包含打開/關(guān)閉 PHP tags。比如, 'echo "Hi!";' 不能這樣傳入: '<?php echo "Hi!"; ?>'。但仍然可以用合適的 PHP tag 來離開、重新進(jìn)入 PHP 模式。比如 'echo "In PHP mode!"; ?>In HTML mode!<?php echo "Back in PHP mode!";'。

除此之外,傳入的必須是有效的 PHP 代碼。所有的語句必須以分號(hào)結(jié)尾。比如 'echo "Hi!"' 會(huì)導(dǎo)致一個(gè) parse error,而 'echo "Hi!";' 則會(huì)正常運(yùn)行。

return 語句會(huì)立即中止當(dāng)前字符串的執(zhí)行。

代碼執(zhí)行的作用域是調(diào)用 eval() 處的作用域。因此,eval() 里任何的變量定義、修改,都會(huì)在函數(shù)結(jié)束后被保留。

eval返回值

eval() 返回 NULL,除非在執(zhí)行的代碼中 return 了一個(gè)值,函數(shù)返回傳遞給 return 的值。 PHP 7 開始,執(zhí)行的代碼里如果有一個(gè) parse error,eval() 會(huì)拋出 ParseError 異常。在 PHP 7 之前, 如果在執(zhí)行的代碼中有 parse error,eval() 返回 FALSE,之后的代碼將正常執(zhí)行。無法使用 set_error_handler() 捕獲 eval() 中的解析錯(cuò)誤。

eval使用示例

<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>

以上例程會(huì)輸出:

This is a $string with my $name in it.
This is a cup with my coffee in it.

以上就是php字符串轉(zhuǎn)成可執(zhí)行代碼的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI