function_exists php

时间:2010-12-28 10:51:02

标签: php

我正在尝试编写一个可以接收它的第二个arg函数名称的函数。 为了验证函数的名称(将在eval语句中使用),我使用function_exists,例如:

if(function_exists($type)){
    $toEval= $type.'(\''.$file.'\');';
  }else{

但是如果发送的arg是include或require(带有'once'变体),则此代码失败(function_exists返回false)。

3 个答案:

答案 0 :(得分:2)

我认为您应该考虑您的应用程序是否真的设计得很好。这种代码通常表明整体设计存在问题。你应该非常小心你传递给这种方法。您最终可能会遇到一些非常严重的安全问题。

if($type == 'require' || $type == 'require_once' || .. || function_exists($type)){}

或更好

$constructs = array('include', 'require', ...);
if(in_array($type, $constructs) || function_exists($type)){};

答案 1 :(得分:1)

includerequire和其他一些调用是语言结构,而不是函数。

您必须手动检查这些内容。

请参阅this manual page以获取其列表。

答案 2 :(得分:0)

这些不是函数,而是语言结构:

http://mahmudahsan.wordpress.com/2008/07/02/php-take-advantage-of-language-constructs/

如果它们可以接受,您应该手动过滤它们,例如使用switch语句:

switch( strtolower($type) ){
    case 'echo':
    case 'print':
    case 'include':
       ...
       break;
}