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