PHP session side-effect warning с глобальными переменными в качестве источника данных


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

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

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

5 42

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"];

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

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

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0

В моем случае, php.изменение ini с on на off

Вот так:

session.bug_compat_42 = off
session.bug_compat_warn = off

Если не работает, перезагрузите apache