Я работаю над структурой, которая использует register_globals
. Моя локальная версия php – 5.4. Я знаю, что register_globals DEPRECATED с PHP 5.3.0
и УДАЛЕН в PHP 5.4
. Но я должен заставить его работать на PHP 5.4
, есть ли способ? Любая помощь и предложения будут очень заметными. Благодарю.
Вы можете эмулировать register_globals
, используя извлечение в глобальной области :
extract($_REQUEST);
Или поместить его в независимую функцию, используя глобальные и переменные переменные
function globaling() { foreach ($_REQUEST as $key => $val) { global ${$key}; ${$key} = $val; } }
PS Я думаю, что вы выпустили приложение и не хотите ничего менять в нем.
Вы можете создать файл globals.php
с помощью
Затем добавьте директиву auto_prepend_file в .htaccess
php_value auto_prepend_file ./globals.php
После того, как эти глобальные значения будут добавлены к каждому вызову
Из руководства PHP в нем говорится, что:
Эта функция была DEPRECATED с PHP 5.3.0 и удалена с PHP 5.4.0.
Однако поиск Google выявил этот метод на форумах Ubuntu :
Нет, это, наконец, ушло навсегда. Какой бы сайт по-прежнему не использовал глобальные переменные, что, полдюжины лет или больше, чтобы исправить код?
Самое быстрое решение – создать глобалы с нуля, запустив этот код в начале приложения:
Код:
foreach ($_REQUEST as $key=>$val) { ${$key}=$val; }
Вы должны быть осторожны, чтобы любая переменная, созданная таким образом, еще не определена в оставшейся части скрипта.
Вы можете заставить этот код запускать перед каждой страницей сайта, используя директиву auto_prepend_file в файле .htaccess.
Я настоятельно рекомендую посмотреть код, требующий register_globals
и изменить его так, чтобы он работал правильно, когда он был отключен.
На всякий случай, это может быть полезно, это код, предложенный на php.net для эмуляции register_globals On :
<?php // Emulate register_globals on if (!ini_get('register_globals')) { $superglobals = array($_SERVER, $_ENV, $_FILES, $_COOKIE, $_POST, $_GET); if (isset($_SESSION)) { array_unshift($superglobals, $_SESSION); } foreach ($superglobals as $superglobal) { extract($superglobal, EXTR_SKIP); } }
Источник: http://php.net/manual/en/faq.misc.php#faq.misc.registerglobals
В php.ini до:
auto_globals_jit = On
После:
auto_globals_jit = Off