PHP手册是否误导'phpinfo()'函数的输出?

时间:2018-06-18 05:05:37

标签: php php-internals

我在我的计算机上使用 Windows 10家庭单语言版,这是一个 64位操作系统

我已安装最新版本的 XAMPP ,已在我的计算机上安装 PHP 7.2.6

我在PHP Manual

的段落中看到了以下句子
  

调用phpinfo()函数,你会看到很多有用的东西   有关您的系统和设置的信息,例如可用的预定义   变量,加载的PHP模块和配置设置。

我尝试执行以下脚本并在网络浏览器中看到输出:

<?php phpinfo(); ?>

我仔细检查了整个输出。在phpinfo()的输出中,我只能看到$_SERVER预定义变量以及特定于我的机器上设置的可能索引。

但是PHP中的其他预定义变量呢? $ GLOBALS,$ _GET,$ _POST,$ _FILES,$ _COOKIE,$ _SESSION,$ _REQUEST,$ _ ENV,$ http_response_header,$ argc,$ argv

根据PHP Manual的文字说明所有上述预定义变量及其各自的值应该显示在脚本<?php phpinfo(); ?>的输出中,但它没有发生。为什么这样?

PHP手册中的文本是否误导了PHP的用户?

或者我对PHP手册中的文本有错误的理解?

请详细解释我。

1 个答案:

答案 0 :(得分:2)

正如您在PHP source code for phpinfo()中看到的,它将显示有问题的变量:

    if (flag & PHP_INFO_VARIABLES) {
        zval *data;

        SECTION("PHP Variables");

        php_info_print_table_start();
        php_info_print_table_header(2, "Variable", "Value");
        if ((data = zend_hash_str_find(&EG(symbol_table), "PHP_SELF", sizeof("PHP_SELF")-1)) != NULL && Z_TYPE_P(data) == IS_STRING) {
            php_info_print_table_row(2, "PHP_SELF", Z_STRVAL_P(data));
        }
        if ((data = zend_hash_str_find(&EG(symbol_table), "PHP_AUTH_TYPE", sizeof("PHP_AUTH_TYPE")-1)) != NULL && Z_TYPE_P(data) == IS_STRING) {
            php_info_print_table_row(2, "PHP_AUTH_TYPE", Z_STRVAL_P(data));
        }
        if ((data = zend_hash_str_find(&EG(symbol_table), "PHP_AUTH_USER", sizeof("PHP_AUTH_USER")-1)) != NULL && Z_TYPE_P(data) == IS_STRING) {
            php_info_print_table_row(2, "PHP_AUTH_USER", Z_STRVAL_P(data));
        }
        if ((data = zend_hash_str_find(&EG(symbol_table), "PHP_AUTH_PW", sizeof("PHP_AUTH_PW")-1)) != NULL && Z_TYPE_P(data) == IS_STRING) {
            php_info_print_table_row(2, "PHP_AUTH_PW", Z_STRVAL_P(data));
        }
        php_print_gpcse_array(ZEND_STRL("_REQUEST"));
        php_print_gpcse_array(ZEND_STRL("_GET"));
        php_print_gpcse_array(ZEND_STRL("_POST"));
        php_print_gpcse_array(ZEND_STRL("_FILES"));
        php_print_gpcse_array(ZEND_STRL("_COOKIE"));
        php_print_gpcse_array(ZEND_STRL("_SERVER"));
        php_print_gpcse_array(ZEND_STRL("_ENV"));
        php_info_print_table_end();
}

但是,正如您所看到的,当a)超全局存在(取决于SAPI)并且b)它实际上包含值时,它使用php_print_gpcse_array来打印其中的每个键/值对。

TL; DR:不,PHP手册在这方面没有误导性。