Я пытаюсь разместить PHP-сайт, который мне был предоставлен. Я вижу это предупреждение:
Предупреждение: Неизвестно. Возможно, ваш сценарий зависит от побочного эффекта сеанса, который существовал до PHP 4.2.3. Пожалуйста, имейте в виду, что расширение сеанса не рассматривает глобальные переменные как источник данных, если только register_globals не включен. Вы можете отключить эту функциональность и это предупреждение, установив, соответственно, session.bug_compat_42 или session.bug_compat_warn. в Unknown в строке 0
- Почему, если я зарегистрировался на своем веб-сайте как зарегистрированный пользователь, я не могу получить доступ к другим страницам после установки правил сеанса?
- PHP: Примечание: неопределенный индекс, в котором определена переменная сеанса
- Сохранять переменную, используя сеансы
- Почему мой массив SESSION OK на одной странице, но пустой на другой?
- Изменение переменных сеанса PHP с помощью файла include
Что это значит? Как я могу отслеживать источник этой проблемы в коде?
в основном у вас есть переменная с тем же именем, что и ваш сеанс. например:
$_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"];
Или vise-versa, если имя сеанса и имя переменной разные. Подумайте об этом так: при обновлении до последней сборки вам придется отлаживать код в любом случае.
Когда вы вносите изменения в .htaccess, ini_set не работает. Вам нужно будет сделать это как:
php_flag session.bug_compat_42 0 php_flag session.bug_compat_warn 0
в моем случае, изменение php.ini от включения до выключения
как это :
session.bug_compat_42 = off session.bug_compat_warn = off
если не работает, перезапустите apache