Forum Webscript.Ru

Программирование => PHP => Тема начата: dub от 27 Августа 2003, 17:17:57

Название: $HTTP_*_VARS -- deprecated
Отправлено: dub от 27 Августа 2003, 17:17:57
С версии PHP 4.1.0 введены новые  переменные окружения и deprecated старые. Теперь советуют использовать, к примеру, $_SERVER вместо $HTTP_SERVER_VARS. $HTTP_*_VARS \'still available but deprecated\'.
Что в данном случае означает deprecated? Что в любой из будущих версий его поддержка может быть отключена и полагаться на $HTTP_*_VARS больше не стоит? А все места в коде, где, к примеру, скрипт получает get-переменную, нужно вместо
$var = $HTTP_GET_VARS[\'var\'];
 переписать так:
$var = $HTTP_GET_VARS[\'var\'];
if (isset($_GET)) $var = $_GET[\'var\']; // для PHP 4.1.0+
else $var = $HTTP_GET_VARS[\'var\']; // для ранних версий

?
Название: $HTTP_*_VARS -- deprecated
Отправлено: Меняздесьдавнонет от 27 Августа 2003, 18:19:03
Ты сам ответил на все свои вопросу.
Ну, разве что, переписать можно по-разному.

Например, правильнее будет вот так:

$my_get_vars=array(\'sort\',\'id\');
foreach($my_get_vars as $var) if(isset($_GET[$var])) $_GLOBALS[$var]=$_GET[$var]; else $_GLOBALS[$var]=\'\';
Название: $HTTP_*_VARS -- deprecated
Отправлено: dub от 27 Августа 2003, 19:00:49
Не совсем понял.
Идея в том, чтобы
  1) делать переменные глобально доступными
  2) несколько переменных сделать доступными одним циклом, а не писать для каждой две строки?
Для глобально доступных переменных вроде $GLOBALS (http://ua.php.net/manual/ru/reserved.variables.php#reserved.variables.globals), а не $_GLOBALS.
И ты присваиваешь либо значение из $_GET либо пустую строку. То есть особого отношения к проблеме "до 4.1.0 и после..." это не имеет, зато каждую из этих переменных впоследствии можно сравнивать только с пустой строкой, а не использовать if (!isset($var) || $var == \'\'). Если я правильно понял.
Для совместимости версий твое решение можно трансформировать так:
$my_get_vars = array(\'sort\',\'id\');
foreach($my_get_vars as $var)  {
  if(isset($_GET[$var])) $GLOBALS[$var]=$_GET[$var];
  elseif(isset($HTTP_GET_VARS[$var])) $GLOBALS[$var]=$HTTP_GET_VARS[$var];
  else $GLOBALS[$var]=\'\';
}
Спасибо.
Название: $HTTP_*_VARS -- deprecated
Отправлено: dub от 27 Августа 2003, 19:04:12
Собственно, основной вопрос состоял в следующем:
Цитировать
полагаться на $HTTP_*_VARS больше не стоит?
Название: $HTTP_*_VARS -- deprecated
Отправлено: Меняздесьдавнонет от 27 Августа 2003, 20:17:48
не стоит, но опять же, если они когда-либо и пропадут, то добавить в начало сайта строчку $HTTP_*_VARS=$_* настолько не проблема, что я абсолютно не заморачиваюсь на эту тему.

Кстати, а почему тебя эта проблема волнует? Чем тебя не устраивает писать просто в новом синтаксисе?
Название: $HTTP_*_VARS -- deprecated
Отправлено: dub от 27 Августа 2003, 21:46:53
Волнует меня переносимость. У меня вот на локалхосте PHP 4.3.1, а у хостера - 4.0.1. Все до сих пор писанные скрипты писаны с использованием $HTTP_*_VARS. Хочется выработать алгоритм написания скриптов, которые будут работать для любых версий PHP4 и при этом не устареют со временем, чтоб потом не пришлось выискивать места получения переменных и исправлять их вручную.
Название: $HTTP_*_VARS -- deprecated
Отправлено: Макс от 27 Августа 2003, 22:40:29
dub
[off] 4.0.1 - это уже такой антиквариат :) Не помню, когда я такую версию видел. Лучше уже хостера пинай[/off]

Обычно в скрипте есть файл с настройками, который подключается во все файлы данного скрипта. Вот в него и вставь :
$HTTP_*_VARS=$_*

хотя я все же советую использовать последние версии. Больше фич меньше багов.
Название: $HTTP_*_VARS -- deprecated
Отправлено: dub от 28 Августа 2003, 00:40:56
Цитировать
Макс:
Обычно в скрипте есть файл с настройками, который подключается во все файлы данного скрипта. Вот в него и вставь

Неплохая мысль. Проверку существования массива $_* можно действительно проводить в конфиге, и если его нет, подставлять
$_* = $HTTP_*_VARS;
А весь код уже писать в новом синтаксисе.

Цитировать
хотя я все же советую использовать последние версии.

Пнуть хостера дело нехитрое. Но это если с позиции клиента. А с позиции программера хочется писать максимально совместимые скрипты.
Название: $HTTP_*_VARS -- deprecated
Отправлено: Макс от 28 Августа 2003, 01:05:15
кстати наверное логичнее будет использовать ссылки
$_* = & $HTTP_*_VARS;

[off]По поводу совместимости - имхо лишняя трата своего времени и усложнение скрипта. Ну или хотя бы ограничиться версией 4.3.0, но никак не 4.0.1[/off]