【问题标题】:How to get phpinfo() variables from php programmatically?如何以编程方式从 php 获取 phpinfo() 变量?
【发布时间】:2011-01-05 09:02:44
【问题描述】:

我正在尝试获取 PHP 中“隐藏”常量的可靠(跨请求一致)列表(例如,在大多数情况下,如果没有黑客攻击,客户端将不知道它)。

我感兴趣的一些事情如下:

  1. ./configure 选项。
  2. 我还想要 phpinfo 中的第一个 System 值。
  3. 已加载的 PHP 模块(如 Apache 部分所示)
  4. PHP 的构建日期。
  5. 注册的 PHP 流
  6. 注册的流套接字传输
  7. 注册的流过滤器

我怎样才能获取 phpinfo 的一部分或将这些值作为常规字符串获取?请注意,是否包含标记并不重要,但我不想解析 phpinfo,因为这看起来真的很慢,而且肯定有更好的方法..

【问题讨论】:

    标签: php configuration phpinfo


    【解决方案1】:

    给你:

    1. ini_get_all()get_loaded_extensions() 是我能找到的最接近的
    2. php_uname()
    3. apache_get_modules()
    4. phpversion() 是我能找到的最接近的
    5. stream_get_wrappers()
    6. stream_get_transports()
    7. stream_get_filters()

    另请参阅get_defined_constants()some more


    正如 Chacha102 提到的,您还可以使用输出控制函数并解析phpinfo()

    ob_start();
    phpinfo();
    $variable = ob_get_contents();
    ob_get_clean();
    

    由于使用了ob_get_clean(),它不会弄乱您可能正在使用的其他输出缓冲级别。

    【讨论】:

    • 我相信PHP_VERSION 是一个同样可以工作的常数。
    • 是的,但我更喜欢使用该功能。 =)
    • 我打赌你在 microptmizations 常数比函数快。再说一次,无论如何,微优化都是愚蠢的。
    • @Chacha102:我的回答是只有函数,不允许使用常量! :P
    • 常量很烦人,因为它们没有定义,或者 PHP 试图将它们用作字符串而不是常量。
    【解决方案2】:

    phpinfo() 提供的大部分内容都可以在常量中找到。试试看:

    print_r(get_defined_constants());
    

    或此页面上的功能:http://us.php.net/manual/en/ref.info.php。有大量函数可以获取有关特定扩展的信息。

    以下功能可能值得一看:

    ini_get()http://us.php.net/manual/en/function.ini-get.php
    getenv()http://us.php.net/manual/en/function.getenv.php
    get_cfg_var()http://us.php.net/manual/en/function.get-cfg-var.php

    【讨论】:

    • 好吧,我不想搞砸输出缓冲,因为我将来可能会将它用于实际页面
    • 输出缓冲可以嵌套。如果您将来实现某些东西,那行代码不会搞砸任何事情。
    • @Chacha102: ob_end_clean() 将关闭输出缓冲(需要再次调用ob_start())。
    • Hmmmm .... 如果你不能摆脱它们,你想如何嵌套 OB...
    • us.php.net/manual/en/function.ob-end-flush.php 说你必须为每个ob_start 多次调用它,它说它会停止最顶层的输出缓冲区,这意味着文档自相矛盾。
    【解决方案3】:

    也许我迟到了一点,但基本上如果你调用一个有问题的shell脚本到php.exe

    php -i
    

    然后你就可以解析所有需要的信息了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多