register_globals off - теперь я получаю странное неопределенное значение, но это не должно быть - PullRequest
2 голосов
/ 03 января 2012

То, что я имел ДО, было ...

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. Первоначально мне понравился 1-й метод, который я выбрал, потому что он продолжал добавлять в массив, и я мог вывести его позже, чтобы посмотреть, что происходит .. Использование $_GLOBALS['debug_err_msgs'] и $_GLOBALS['errorh_string'] заставляет меня .= (добавить) строку к предыдущему (что нормально ... Я не думал, что вы могли бы пойти ... $_GLOBALS['something'][] и продолжать добавлять в массив, как я делал, прежде чем я изменил свой код. ТАК ... Я внес изменения, как показано ниже ... .

PHP

<?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
}
?>

ОШИБКИ IM GETTING

Примечание: неопределенный индекс: errorh_string в /debugOpenBlock.php в строке 14

Примечание: неопределенный индекс: errorh_string в /debugOpenBlock.php в строке 14

Что в приведенном выше коде, ВНУТРИ функции

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

Вот что странно ... если я поменяю строку на чтение ...

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

Я даже пытался

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

Если 'errorh_string' является литералом? почему я не определен в этом.!?! ??! Я что-то упускаю из-за ГЛОБАЛОВ?

Когда я писал это, я думал, что мог бы использовать

global $debug_err_msg[]; // make this array global

вместо того, чтобы изменить весь мой код так, как он есть сейчас, но ... мне любопытно, что это за проблема сейчас ... я ненавижу не знать что-то :)

Кстати - я недавно отключил register_globals в файле PHP.INI. Может ли это быть как-то связано с этим (примечание: я НИКОГДА не использовал $ _SESSION ['somevariable'] как $ somevariable (главным образом потому, что я не знал, что вы можете это сделать, но ... в любом случае это не имеет значения)).

Я прочитал кучу статей о суперглобалах, register_globals и т. Д., Но ничто не проливает свет на это ..

В ожидании мудрости, о, больше, чем я, веб-разработчики:)

1 Ответ

1 голос
/ 03 января 2012

Я не могу найти другую проблему, поэтому кажется, что вы просто использовали неверное имя переменной. Он называется $GLOBALS, а не $_GLOBALS - в отличие от входных массивов. (Кстати, это не зависит от настройки register_globals.)

 global $debug_err_msg;

На самом деле вы должны предпочесть этот метод. Это делает использование переменной более разборчивым, чем с доступом $GLOBALS[], а также показывает, что вы намеренно делитесь этой переменной.

...