register_globals off - 现在我得到一个奇怪的未定义但它不应该

时间:2012-01-03 07:30:34

标签: php global-variables undefined-index register-globals

我之前所拥有的是......

if(DEBUGMODE) $debug_err_msgs[] = 'Some error'; // add a new error to the array

... more code here...

if(DEBUGMODE)$debug_err_msgs[] = 'Some error'; // add a new error to the array

除了功能外,效果很好。所以...我决定使用$ _GLOBALS数组使其成为GLOBAL。我最初喜欢我选择的第一种方法,因为它不断添加到数组中,我可以稍后将其转储以查看发生的情况。使用$_GLOBALS['debug_err_msgs']$_GLOBALS['errorh_string']迫使我{{1}将(字符串)字符串添加到上一个字段(这是正常的......我认为你不能去... .=并继续像我改变代码之前那样添加到数组中。我做了如下修改......

PHP

$_GLOBALS['something'][]

错误即时消息

注意:未定义索引:第14行/debugOpenBlock.php中的errorh_string

注意:未定义索引:第14行/debugOpenBlock.php中的errorh_string

在上面的代码中,INSIDE是函数

<?php
error_reporting(E_ALL);
set_error_handler("ErrorHandler");

$_GLOBALS['errorh_string'] = "";
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] = "";
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] .= 'La la la, some errors';
if(DEBUGMODE) $_GLOBALS['debug_err_msgs'] .= 'more errors... etc';

function ErrorHandler($errno, $errstr, $errfile, $errline)
{
    // if ($errno == 8) return;// 8 is undefined variables
    $error = "<b>Error[</b>$errno<b>] </b>$errstr<br />";
    $_GLOBALS['errorh_string'] .= $error; // append new error to the global string
    return true;    // dont execute the php internal error handler
}
?>

这就是奇怪的......如果我改变线来阅读......

$_GLOBALS['errorh_string'] .= $error; // GIVES ME UNDEFINED

我甚至尝试过

$_GLOBALS['errorh_string'] = $error; // NO ERROR NOW

如果$_GLOBALS['errorh_string'] = $_GLOBALS['errorh_string'] . $error; // GIVES ME UNDEFINED 是文字?为什么我会在其中得到未定义。!?!??!我错过了关于GLOBALS的内容吗?

当我写这篇文章时,我以为我可以使用

'errorh_string'

而不是将我的所有代码改为我现在拥有的方式但是......我很好奇现在这个问题是什么......我讨厌不知道的事情:)

BTW - 我刚刚关闭了PHP.INI文件中的register_globals。这可能与它有什么关系(注意:我从来没有使用$ _SESSION ['somevariable']作为$ somevariable(主要是因为我不知道你能做到这一点但是......无论如何都无关紧要))。

我读过很多关于超级球,注册球等的文章,但是没有任何关于这个的文章。

等待智慧哦我比网络开发人员更多:)

1 个答案:

答案 0 :(得分:1)

我找不到另一个问题,所以问题似乎是你刚才使用了错误的变量名。与输入数组不同,它被称为$GLOBALS,而不是$_GLOBALS。 (它不受register_globals设置btw的影响。)

 global $debug_err_msg;

你应该更喜欢这种方法。这使得使用变量比使用$GLOBALS[]访问更易读,并且还显示您有意共享该变量。