PHP register_globals=off
$_GET['']
$HTTP_POST_VARS (или $_POST)
есть, к примеру, ?a=1&b=qwerty&c=333.
Как сразу всё обозвать, чтобы не писать каждый раз
$a=$_GET["a"];
$b=$_GET["b"];
$c=$_GET["c"];
т.е. пишешь
extract($_GET);
extract($_POST);
ща найду как
а, во выше написали
разобрался. тхкс.
Еще раз, это все было, используй лучше $_REQUEST (по поиску погляди)
вопрос - а нах?
А потому уже года два как разработчики РНР не рекомендуют использовать register_globals=on и всё больше хостеров данную опцию оставляют как есть. В т.ч. и мой хостер тоже скоро так сделает - звонил Дениска, предупреждал
Есть одна подстава: на некоторых хостах бывает (я так и не понял что это за директива) что $_GET и $_POST не работаю, поэтому лучше сразу писать $HTTP_GET_VAES и $HTTP_POST_VARS
HTTP POST variables: $_POSTтак что это не директива, а версия PHP
Note:
Introduced in 4.1.0. In earlier versions, use $HTTP_POST_VARS.
А директивой можно как раз $HTTP_GET_VARS и $HTTP_POST_VARS отключить.
extract -- Import variables into the current symbol table from an arrayТаким образом сводя безопасность скрипта на тот же уровень, что был при regidter_globals=on. Это способ для тех, кто пишет в стиле register_globals=on, а хостится на хостинге где он отключен.
т.е. пишешь
extract($_GET);
extract($_POST);
я так не делаю
так а что же - в каждом скрипте ручками вытаскивать все переменные из массива? Хм... это ж геморрой.
Можно например так :
function ini($varname, $defvalue = '') {
global $_POST, $_GET;
if(isset($_POST[$varname] {
$$varname = $_POST[$varname];
return;
}
if(isset($_GET[$varname] {
$$varname = $_GET[$varname];
return;
}
$$varname = $defvalue;
}
Следующий вопрос. Конфигурация Duron1400/256/XP/Apache 1.3.28/PHP 4.3.4 as a module.
Есть обычный скрипт ресайзинга картинок:
<?
extract($_GET);
$r=imagecreatefromjpeg($img_id.".jpg");
if ($rs_type==1)
{
if (imagesx($r)>=imagesy($r {$new_w=$maxsize; $new_h=$maxsize*(imagesy($r)/imagesx($r;}
else {$new_h=$maxsize; $new_w=$maxsize*(imagesx($r)/imagesy($r;}
}
elseif ($rs_type==2)
{
$new_w=$maxsize; $new_h=$maxsize*(imagesy($r)/imagesx($r;
}
elseif ($rs_type==3)
{
$new_h=$maxsize; $new_w=$maxsize*(imagesx($r)/imagesy($r;
}
$dst_img=ImageCreateTrueColor($new_w,$new_h);
ImageCopyResized($dst_img,$r,0,0,0,0,$new_w,$new_h,ImageSX($rImageSY($r;
imagepng($dst_img);
?>
Рендеринг в ИЕ странички с десятком картинок такого вида занимает, на глаз, около 2 секунд. Это нормально? А что же тогда будет, если на такой сервак одновременно зайдут человек 100?
define ('_PHPSITELIB_GENTIME', 1);
if (_PHPSITELIB_GENTIME) $_phpsitelib_gen = get_micro_time;
<your code>
if (_PHPSITELIB_GENTIME) {
print "<p>Generated " . (get_micro_time - $_phpsitelib_gen) . " sec.</p>";
}
Fatal error: Call to undefined function: get_micro_time in c:\program files\apache group\apache\htdocs\photo\index.php on line 2
З.Ы. Обертка - это кто?
Ну откуда этот скрипт вызывается
RE> Fatal error: Call to undefined function: get_micro_time in c:\program files\apache group\apache\htdocs\photo\index.php on line 2
Странно у меня работает. Версия php м.б. другая
или не включен какой-то модуль...
вот:
function get_micro_time {
list($usec, $sec) = explode(' ', microtime;
return float)$usec + (float)$sec);
}
Хм... или это ИЕ тормозит, или я чего-то не понимаю...
это очень хорошее время обычно требование 0.005-0.01 и то последнее уже плохо, в опере протесть
так же... В общем, и там, и там - от 0.002 до 0.011, при этом память загружена конкретно и окон полно висит.
/**
* Вспомогательная ф-я. Ищет в запросе первый аргумент.
* Если находит - кладет его в глобальные переменные (в случае уст. флага $set_glob)
* со значением из запроса, если нет - со значением, которое передано в ф-ию
* @author Rumata
* @param string $var_name имя переменной
* @param string $def_val дефолтовое значение
* @param string $type Тип переменной. Если mixed, то приведение не производится
* @param bool $set_glob Флаг, показывающий, надо ли устанавливать значение глобальной переменной
* @return mixed Переменная, которая была установлена
*/
function pretest($var_name, $def_val, $type, $set_glob = false) {
if (isset($_REQUEST[$var_name] {
$tmp = $_REQUEST[$var_name];
} else {
$tmp = $def_val;
}
if ($type != "mixed" && $type != "")
settype($tmp, $type);
if ($set_glob) $GLOBALS[$var_name] = $tmp;
return $tmp;
}
помню у меня как то 30000 картинок перерисовались за 35 секунд.... так что в принципе нормально....
ЗЫ А сайт с 45000 HTML страниц создаеться за 3 минуты
function ini($varname, $defvalue = '') {
global $_POST, $_GET;
if(isset($_POST[$varname] {
$$varname = $_POST[$varname];
return;
}
if(isset($_GET[$varname] {
$$varname = $_GET[$varname];
return;
}
$$varname = $defvalue;
}
Я вообще PHP не знаю, но у меня есть ощущение, что эта фигня делает всё тот же extract, а следовательно даёт тот же эффект, что register_globals.
так а что же - в каждом скрипте ручками вытаскивать все переменные из массива? Хм... это ж геморрой.Чууувааак! Праграммировать граматна эта вааще конкретный геморрой! Радуйся что ты выбрал один из наиболее безгеморройных (читай безграмотных) языков.
Я вообще PHP не знаю, но у меня есть ощущение, что эта фигня делает всё тот же extract, а следовательно даёт тот же эффект, что register_globals.
напомнило:
совковые времена, съезд или ещё какое заседание.... :
Я книгу .... (фамилия неугодного власти писателя) конечно же не читал, но считаю что .... (обсирание)
Короче, эта функция делает как раз не то же самое, что register_globals=On, а как раз помогает в работе, если register_globals=Off
Не, ну не скажи. Эта ф-ия, на самом деле, хуже, чем extract т.к. вытаскивает переменные не в том порядке - по умолчанию берутся сначала из GET, потом POST. А вообще так лучше, чем extract, т.к. ты лично отвечаешь за каждую вынутую переменную, а не вынимаешь их всех скопом. В этом отношении моя функция еще более продвинута, т.к. задает строгую типизацию.
Да, я ошибся.
Но мне всё равно это не нравится, потому что эти переменные полученные извне (т.н. tainted) ничем не отличаются от твоих собственных переменных. Удобно, когда ты сразу видишь $cgi->param('var' а не $var. Я когда пишу веб-скрипты, то никогда не делаю: $var = $cgi->param('var' что бы затем юзать $var. Я всегда пишу длинный вариант, что бы было наглядно видно, что используются tainted данные.
Оставить комментарий
uncle17
Наконец-то хочу перейти к такому.Как переменные из гета-поста вытаскиваются? Не помню...