【问题标题】:overwrite the phpinfo() function?覆盖 phpinfo() 函数?
【发布时间】:2011-11-14 14:09:44
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • phpinfo 中的什么你不想让他们看到?
  • 您让他们能够在您的服务器上执行代码。试图限制phpinfo中的数据是浪费时间。
  • 是的,但我想自定义它以显示一组中最重要的设置,以便更轻松快捷地查看。
  • @s2xi:这就是查找/搜索功能的用途?
  • 是的,但我想自定义我正在制作的 CMS 的各个方面,并将这种独特的外观和感觉传递给我的注册用户。当我的用户想要制作自己的托管应用程序时,我正在尝试为他们简化流程。

标签: php


【解决方案1】:

您可以使用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;
}

【讨论】:

  • 太棒了!我想为默认的 phpinfo() 制作自己的包装器,这可能会奏效。嗯,我在哪里使用runkit_function_name 请你给我一个快速的脏用法示例。
  • 是的,很抱歉,我没有看到您屏蔽了链接!我刚刚阅读完有关此的 php 文档。非常感谢。
【解决方案2】:

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

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

【讨论】:

  • 我不想审查我的用户,我只是想用我独特的风格重新创建输出,以匹配我的自定义 CMS,并使输出更易于浏览。将所有重要的常用扩展设置放在顶部附近等等。
猜你喜欢
  • 2010-10-25
  • 2010-10-30
  • 2015-03-12
  • 2011-05-31
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多