Forum Webscript.Ru
Программирование => PHP => Тема начата: 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\']; // для ранних версий
?
-
Ты сам ответил на все свои вопросу.
Ну, разве что, переписать можно по-разному.
Например, правильнее будет вот так:
$my_get_vars=array(\'sort\',\'id\');
foreach($my_get_vars as $var) if(isset($_GET[$var])) $_GLOBALS[$var]=$_GET[$var]; else $_GLOBALS[$var]=\'\';
-
Не совсем понял.
Идея в том, чтобы
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 больше не стоит?
-
не стоит, но опять же, если они когда-либо и пропадут, то добавить в начало сайта строчку $HTTP_*_VARS=$_* настолько не проблема, что я абсолютно не заморачиваюсь на эту тему.
Кстати, а почему тебя эта проблема волнует? Чем тебя не устраивает писать просто в новом синтаксисе?
-
Волнует меня переносимость. У меня вот на локалхосте PHP 4.3.1, а у хостера - 4.0.1. Все до сих пор писанные скрипты писаны с использованием $HTTP_*_VARS. Хочется выработать алгоритм написания скриптов, которые будут работать для любых версий PHP4 и при этом не устареют со временем, чтоб потом не пришлось выискивать места получения переменных и исправлять их вручную.
-
dub
[off] 4.0.1 - это уже такой антиквариат :) Не помню, когда я такую версию видел. Лучше уже хостера пинай[/off]
Обычно в скрипте есть файл с настройками, который подключается во все файлы данного скрипта. Вот в него и вставь :
$HTTP_*_VARS=$_*
хотя я все же советую использовать последние версии. Больше фич меньше багов.
-
Макс:
Обычно в скрипте есть файл с настройками, который подключается во все файлы данного скрипта. Вот в него и вставь
Неплохая мысль. Проверку существования массива $_* можно действительно проводить в конфиге, и если его нет, подставлять
$_* = $HTTP_*_VARS;
А весь код уже писать в новом синтаксисе.
хотя я все же советую использовать последние версии.
Пнуть хостера дело нехитрое. Но это если с позиции клиента. А с позиции программера хочется писать максимально совместимые скрипты.
-
кстати наверное логичнее будет использовать ссылки
$_* = & $HTTP_*_VARS;
[off]По поводу совместимости - имхо лишняя трата своего времени и усложнение скрипта. Ну или хотя бы ограничиться версией 4.3.0, но никак не 4.0.1[/off]