Авторы PHP были настолько гениальны,
что придумали передавать параметры скрипту через глобальные переменные, да еще и обрабатывать их по-разному в зависимости от настроек сервера, и тем самым обрекли миллионы хомячков на неизбежное порождение тонн говнокода, который к тому же приходилось несколько раз переписывать с выходом новых версий PHP. Было время, когда вообще не существовало _никакого_ переносимого способа взять переменные скрипта, потому что любой из способов можно было отключить, и одни сервера были настроены так, а другие - эдак. Сейчас стало получше, но ненамного, и проблем у начинающих PHP программистов все равно масса. Рассказываю правильное решение всех этих проблем. Правильное решение состоит в том, чтобы никогда, никогда не пользоваться переменными $_GET и $_POST, а оставить эту грязную работу специальной функции, которая возьмет эти несчастные параметры, почистит их от говнища типа magic_quotes_gpс() и в готовом к употреблению, и главное, переносимом виде передаст основному коду. Замечания по функции: во-первых, раньше в ней были учтены $HTTP_GET_VARS, $HTTP_POST_VARS и т.д., но с постепенным отмиранием серверов с PHP4 функцию стало возможно упростить. Это одно из ее назначений: если авторы PHP придумают нам еще какой-нибудь сюрприз, мы сможем бороться с ним в одном месте. Во-вторых, тут используется дополнительный класс для парсинга командной строки, который я не привожу, но сам парсинг нужен довольно редко, так что эту ветку можете просто вырезать или проигнорировать. Итак:
class utils
{
// ....
/// Get script arguments
/**
* Depends on calling method.
* Suports GET, POST and command line calling.
* Removes magic_quotes_gps effect
*/
public static function getArgs()
{
if(isset($_SERVER['REQUEST_METHOD']))
{
if($_SERVER['REQUEST_METHOD']=='POST')
$return=$_POST;
else $return=$_GET;
if(get_magic_quotes_gpc())
array_walk_recursive($return,create_function('&$value','$value=stripslashes($value);'));
return $return;
}else if(isset($_SERVER['CMDLINE']))
{
include_once 'parser.class.php';
$parser=new Parser($_SERVER['CMDLINE']);
$parser->readRegexp('[^ ]+([ ]+-[^ ]+)*[ ]+[^ ]+');
$retval=array();
while(strlen($parser->buffer))
{
if($parser->skipSpace()) continue;
if(!$retval[]=$parser->readRegexp('(("[^"]*")|[^ "]+)'))
break;
}
return $retval;
}
return array();
}
// ....
}