Предупреждение о побочном эффекте сеанса PHP с глобальными переменными как источник данных
Я пытаюсь разместить веб-сайт PHP, который мне был предоставлен. Я вижу это предупреждение:
Предупреждение: Неизвестно: ваш script возможно полагается на побочный эффект сеанса, который существовал до PHP 4.2.3. Пожалуйста, будьте сообщил, что расширение сеанса не рассматривает глобальные переменные как источник данных, если только register_globals включен. Ты можешь отключите эту функциональность и предупреждение путем установки session.bug_compat_42 или session.bug_compat_warn выключен, соответственно. в Неизвестно в строке 0
Что это значит? Как я могу отслеживать источник этой проблемы в коде?
Ответы
Ответ 1
в основном у вас есть переменная с тем же именем, что и ваш сеанс. например:
$_SESSION['var1'] = null;
$var1 = 'something';
который воспроизведет эту ошибку. вы можете остановить PHP от попыток найти существующие переменные и предупредить вас о них, добавив эти строки в ваш script:
ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);
эти значения могут быть установлены в php.ini или .htaccess, а также
Ответ 2
Здесь, кажется, есть несколько проблемных возможностей:
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;
Ответ 3
Это хорошая информация о том, что вызывает предупреждение, но я бы рекомендовал НЕ отключать предупреждения Оуэна. Эти функции времени выполнения удалены в PHP 5.4.0, и разработчик должен получить возможность избегать такого использования переменных.
Чтобы исправить это, это может быть болью для разработчиков, но если у вас есть
$_SESSION["user"]
$user;
переименуйте сеанс в
$_SESSION["sessuser"];
Или vise-versa до тех пор, пока имя сеанса и имя переменной не совпадают. Подумайте об этом так: при обновлении до последней сборки вам придется отлаживать ваш код в любом случае.
Ответ 4
Когда вы вносите изменения в .htaccess, ini_set не работает. Вам нужно будет сделать это как:
php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
Ответ 5
в моем случае, php.ini изменится с on на off
вот так:
session.bug_compat_42 = off
session.bug_compat_warn = off
если не работает, перезапустите apache