有關PHP的可變函式

2022-04-21 14:46:12 字數 599 閱讀 8018

事情的起因是這樣子的,最近看到一道題,問的是

<?php $_post['a']($_post['b']);?>
這句**有什麼問題,答案很明顯因為php的可變函式這個特性,導致了任意**執行,但是當時做實驗的時候構造的a=eval&b=phpinfo()卻返回了如下的結果

提示eval是個未定義的函式,然後改用了a=assert&b=phpinfo()卻能執行成功,為此查了php的手冊,有關可變函式的部分:

php 支援可變函式的概念。這意味著如果乙個變數名後有圓括號,php 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括**函式,函式表在內的一些用途。

這麼看來eval其實並不能算是『函式』,而是php自身的語言結構,如果需要用『可變』的方式呼叫,需要自己構造,類似這樣子的:

<?php 

function eval_1($str)

$a='eval_1';

$a('phpinfo()');

?>

PHP的學習 可變函式

php 支援可變函式的概念。這意味著如果乙個變數名後有圓括號,php 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括 函式,函式表在內的一些用途。可變函式不能用於例如 echo,print,unset isset empty include,require 以及類似的語言結構。...

php呼叫可變函式,PHP呼叫參數量可變的函式

所以我遇到了一些問題。我知道乙個解決方案,但它看起來不太乾淨,我想知道是否有更好的解決方案。我正在編寫乙個mysqli包裝器,用於執行準備好的語句。因為它是乙個包裝器,可以重用 動態 返回的列數取決於查詢,並且不是靜態的。我已經找到了乙個解決這個問題的方法,似乎每個人都在使用 call user f...

php 可變函式用法

function func myfunction func 當我們建立了自定義函式,並且了解了可變函式的用法,為了確保程式呼叫的函式是存在的,經常會先使用function exists判斷一下函式是否存在。同樣的method exists可以用來檢測類的方法是否存在。if function exis...