2013-05-03 7 views
2

Я использую PHP5.3.8 некоторое время, и я только что натолкнулся на новую ошибку для меня;PHP, объявляющий глобальные переменные и переменные сеанса

Предупреждение: Неизвестно. Возможно, ваш сценарий зависит от побочного эффекта сеанса , который существовал до PHP 4.2.3. Обратите внимание, что расширение не рассматривает глобальные переменные в качестве источника данных, , если только register_globals не включен. Вы можете отключить эту функцию и это предупреждение, установив session.bug_compat_42 или session.bug_compat_warn соответственно. in Unknown В строке поиска 0

Для решения этой проблемы здесь; PHP session side-effect warning with global variables as a source of data.

Однако я до сих пор не понимаю Почему Это происходит. Насколько мне известно, не должно быть двусмысленности между $foo и $_SESSION['foo']?

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

Однако я сузил его до одной строки;

$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : ''; 

$_SESSION['bonus'] установлен в null в предыдущей странице, и register_globals был выключен, так как о чем-то PHP4.2, поэтому не может быть сфера $ _GET.

Так что это возвращает меня к моему первому пункту; почему возникает неожиданно проблема между $bonus и $_SESSION['bonus']? Я говорю внезапно, потому что я использую этот точный скрипт на другом сайте (тот же самый), и я не получаю ошибок.

Может ли кто-нибудь указать мне куда угодно, что, возможно, объясняет более подробно, как PHP имеет дело с сессионными варами и т. Д. И почему существует проблема между двумя переменными?

Спасибо.

[Update]

Глядя здесь; PHP Runtime Configuration это не говоря уже о том, что:

[РНР ...] недокументированная особенность/ошибка, которая позволяет инициализировать переменную сеанса в глобальном масштабе ...

Я предполагаю, что может не намного больше сказать, кроме этого. Это только кажется странным, что PHP имеет проблемы с $_SESSION['foo']/$foo когда $_SESSION['foo'] != $foo ...

+0

Вопрос не достаточно ясен для меня. –

+0

@HermannStephaneNtsamo вопрос; почему объявление переменной с тем же именем, что и переменная сеанса, выдает это предупреждение? – Stu

ответ

1

Попробуйте установить session.bug_compat_42 кремовый, она выключит функциональность предупреждения о. c.f. http://php.net/manual/en/session.configuration.php

+0

Привет Adder, спасибо за ссылку, я знаю, как отключить предупреждение, но я просто ищу немного больше информации о том, почему это происходит, вместо того, чтобы игнорировать его. – Stu

+0

Хорошо, когда я прочитал документацию, вы можете назначить глобальному '$ alert' для установки' $ _SESSION ['alert'] ', если функция включена. И 'session.bug_compat_42' не отключает предупреждение об активации этой функции. – Adder

+0

ах круто, ta для объяснения :) – Stu

Смежные вопросы