覆盖phpinfo()函数?

时间:2011-09-11 00:32:44

标签: php

我很好奇,想知道我是否有办法制作自己的phpinfo()函数?

function phpinfo() {
   // show custom list of php.ini settings here
}

我试过这个,但我得到一个解析错误,因为我将我的函数命名为与PHP内置函数相同。

我知道你可以改变phpinfo()输出数据的方式(颜色等),但我还没有找到可以过滤页面内容的方法。

我让人们在注册时创建子域名,并且我让他们托管他们自己的文件,但我不想限制phpinfo输出,以便他们只能看到我让他们看到的内容。

我可以完全控制我的PHP安装,因为我在专用服务器上运行我的网站,如果有帮助的话。

2 个答案:

答案 0 :(得分:3)

您可以使用runkit_function_rename重命名旧版phpinfo。重命名后,您可以定义名为phpinfo的新函数。如果您需要调用旧函数,只需使用新名称调用它。或者,如果您不需要调用旧函数,则可以使用runkit_function_remove删除它。

这些解决方案的问题是,如果他们知道您重命名的名称,他们可以调用它来获取原始输出。最好的解决方案可能是修改PHP源以过滤phpinfo输出。

修改:以下是您如何使用runkit_function_rename的示例。我没有安装runkit所以我无法测试它是否有效,但它可能会:

runkit_function_rename('phpinfo', 'old_phpinfo');

function phpinfo() {
    ob_start();
    old_phpinfo();
    $data=ob_get_contents();
    ob_end_clean();
    $data=str_replace("php", "(the language you're using)", $data);
    echo $data;
}

答案 1 :(得分:0)

您可以使用php.ini指令disable_functions来禁用标准的phpinfo函数,该函数允许您定义自己的函数。请参阅http://php.net/manual/en/ini.core.php

我认为这不是一条很好的路线。您需要能够信任允许您将代码上传到服务器的人。我不认为phpinfo()输出中有太多东西不能通过其他方式得到。