关于 'phpinfo()' 函数的输出,PHP 手册是否存在误导?
Is the PHP Manual misguiding regarding the output of 'phpinfo()' function?
我在我的机器上使用 Windows 10 家庭单语言版,这是一个 64 位操作系统 .
我已经安装了最新版本的 XAMPP 其中安装了 PHP 7.2.6在我的机器上。
我从 PHP Manual
中的段落中看到以下句子
Make a call to the phpinfo() function and you will see a lot of useful
information about your system and setup such as available predefined
variables, loaded PHP modules, and configuration settings.
我尝试执行以下脚本并在我的网络浏览器中看到了输出:
<?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 手册中的文字理解有误?
请详细解释一下。
正如您在 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();
}
但是,如您所见,它使用 php_print_gpcse_array
来打印其中的每个 key/value 对,当 a) 超全局存在(依赖于 SAPI)和 b) 它实际上包含值时。
TL;DR: 不,PHP 手册在这方面没有误导。
我在我的机器上使用 Windows 10 家庭单语言版,这是一个 64 位操作系统 .
我已经安装了最新版本的 XAMPP 其中安装了 PHP 7.2.6在我的机器上。
我从 PHP Manual
中的段落中看到以下句子Make a call to the phpinfo() function and you will see a lot of useful information about your system and setup such as available predefined variables, loaded PHP modules, and configuration settings.
我尝试执行以下脚本并在我的网络浏览器中看到了输出:
<?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 手册中的文字理解有误?
请详细解释一下。
正如您在 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();
}
但是,如您所见,它使用 php_print_gpcse_array
来打印其中的每个 key/value 对,当 a) 超全局存在(依赖于 SAPI)和 b) 它实际上包含值时。
TL;DR: 不,PHP 手册在这方面没有误导。