Повторно ввести $ HTTP_POST_VARS в PHP 5.3

Мне нужно запустить устаревшее PHP-приложение в среде совместного размещения. Я пообещал своему клиенту, что некоторое время поддерживаю это устаревшее приложение, но обнаружил, что он не работает, потому что он широко использует устаревшие $HTTP_POST_VARS .

Понижение PHP не является вариантом. Исправление приложения может быть неосуществимым, потому что файлы PHP генерируются из исполняемого файла Windows (я не шучу!), И каждый раз, когда сайт восстанавливается с рабочего стола, мы можем потерять изменения.

Я спрашиваю, есть ли способ сообщить PHP повторно ввести $HTTP_POST_VARS для всех сайтов на хосте или только для определенного vhost. Любой другой вариант / предложение оценены

Вы можете сделать это

config.php

 $HTTP_POST_VARS = &$_POST; $HTTP_GET_VARS = &$_GET; $HTTP_COOKIE_VARS = &$_COOKIE; 

.htaccess

 php_value auto_prepend_file /path/to/config.php 

Строка PHP doc auto_prepend_file

Задает имя файла, который автоматически анализируется перед основным файлом. Файл включен, как если бы он был вызван с помощью функции require, поэтому используется include_path.

Специальное значение none отключает автоматическое добавление.

EDIT: Чтобы быть более тщательным, это другие суперглобалы, которые также могут быть сглажены:

 $HTTP_SERVER_VARS = &$_SERVER; $HTTP_POST_FILES = &$_FILES; $HTTP_SESSION_VARS = &$_SESSION; $HTTP_ENV_VARS = &$_ENV; 

Как насчет чего-то вроде

 $HTTP_POST_VARS = $_POST; 

Если вы можете включить код на страницы, это должно сработать. Конечно, вы должны иметь доступ к исходному коду и перекомпилировать exe в Windows, но вы сказали, что можете .

register_long_arrays работает для 5.3, но они вызвали это в php 5.4

http://www.php.net/manual/en/ini.core.php#ini.register-long-arrays

И да, этот параметр имеет значение PHP_INI_PERDIR , поэтому вы можете установить его через отдельный .htaccess или отдельные ini-файлы, а также установить его глобально.

Похоже, что следующее может работать.

Во-первых, создайте edisplaypatch.php где-нибудь со следующим кодом

 <?php if (getenv('EDISPLAY_PATCH')) { if (!isset($HTTP_GET_VARS)) $HTTP_GET_VARS = $_GET; if (!isset($HTTP_POST_VARS)) $HTTP_POST_VARS = $_POST; if (!isset($HTTP_COOKIE_VARS)) $HTTP_COOKIE_VARS = $_COOKIE; } ?> 

Этот код может быть обобщен и повторно использован с любой другой программой, требующей старых длинных массивов

Затем в конфигурации vhost Apache добавьте

 SetEnv EDISPLAY_PATCH true 

Перезагрузите Apache.

Тестовый код работает: если SetEnv отсутствует, ничего не отображается, если присутствует, показывает, что вы отправляете как параметр rnd в querystring

 <?php echo $HTTP_GET_VARS['rnd']; //phpinfo(); ?> 

Небольшой недостаток: я включаю файл в каждый запрос PHP