2008-10-06 8 views
42

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

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

Что это значит? Как я могу отслеживать источник этой проблемы в коде?

ответ

98

В основном у вас есть переменная с тем же именем, что и ваша сессия. ex:

$_SESSION['var1'] = null; 
$var1 = 'something'; 

который воспроизведет эту ошибку. вы можете остановить PHP от попыток найти существующие переменные и предупреждения о них, добавив следующие строки в ваш скрипт:

ini_set('session.bug_compat_warn', 0); 
ini_set('session.bug_compat_42', 0); 

эти значения могут быть установлены в php.ini или .htaccess, а

+0

работает как шарм! Пальцы вверх! – Anunay 2013-07-02 15:44:50

6

Там, кажется, быть несколько проблемных возможностей здесь:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

говорит, что такие случаи:

$_SESSION['firstname']=$_REQUEST['firstname']; 

вызовет предупреждение.

Кроме того, я интерпретирую этот контент с ошибкой php: http://bugs.php.net/bug.php?id=41540, чтобы означать, что эта ошибка также может возникать, когда вы назначаете переменную суперглобалу сеанса, который еще не инициализирован, например.

//Start of script 
$_SESSION['bob'] = $bob; 
2

Когда вы вносите изменения в .htaccess, ini_set не работает. Вам нужно будет сделать это как:

php_flag session.bug_compat_42 0 
php_flag session.bug_compat_warn 0 
5

Это хорошая информация о выяснить, что вызывает предупреждение, но я бы рекомендовал НЕ отключать предупреждения Оуэн упоминает. Эти функции времени выполнения - removed in PHP 5.4.0, и разработчик должен практиковать избегание такого использования переменных.

Чтобы это исправить, это может быть боль в конце разработчиков, но если у вас есть

$_SESSION["user"] 
$user; 

переименовать сеанс

$_SESSION["sessuser"]; 

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

1

в моем случае, php.ini переход от на кремовый

так:

session.bug_compat_42 = off 
session.bug_compat_warn = off 

если не работает, перезапустите Apache