$_GET пуст, если в URL-адресе есть переменные.

У меня есть URL-адрес, который выглядит так reg.php?lang=no_NO&passkey=test, и я пытаюсь получить переменную пароля, но он продолжает отображаться пустым.

Когда я пытаюсь print_r($_GET);, он печатает Array ( )?! Как это может произойти?

Сайт выглядит примерно так

    <?php

        print_r($_GET); 

        include('..\libs\Smarty.class.php');
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Activate account</title>

(...html code.. )

$smarty = new Smarty;

//$smarty->force_compile = true;
$smarty->debugging = false;
$smarty->caching = false;
$smarty->cache_lifetime = 120;


// PHP gettext api
define('PROJECT_DIR', realpath('./'));

(... define gettext ... )

$passkey=$_GET['passkey'];

(...work with passkey ...)

$smarty->display('templates\site.tpl');

?>


</body>
</html>

это оно. Я не могу понять, почему $_GET отображается пустым. Это уже давно сводит меня с ума..


person ganjan    schedule 11.08.2010    source источник
comment
Вы используете какой-либо вид перезаписи URL-адресов или reg.php является фактическим файлом?   -  person darma    schedule 12.08.2010
comment
Вы случайно не используете CodeIgniter или другой фреймворк? Иногда они топчут переменные $_REQUEST.   -  person Matt Williamson    schedule 12.08.2010
comment
@darma: даже если reg.php является реальным файлом - mod_rewrite может потерять строку запроса, если она была написана неправильно   -  person zerkms    schedule 12.08.2010
comment
@Matt Williamson: на самом деле это не объясняет, почему $_GET исчез.   -  person zerkms    schedule 12.08.2010
comment
@zerkms: вы правы, я особенно думал о [QSA], который мог отсутствовать.   -  person darma    schedule 12.08.2010
comment
@zerkms: $_REQUEST включает $_POST и $_GET, и я точно знаю, что CodeIgniter убивает их, поэтому вам нужно использовать их специальные функции, чтобы добраться до них.   -  person Matt Williamson    schedule 12.08.2010
comment
CodeIgniter убивает их -- это правда???????? какого хрена они это делают? еще один минус против CI.   -  person zerkms    schedule 12.08.2010
comment
@zerkms CI автоматически фильтрует все GETS в качестве меры безопасности. _POST работает именно так, как вы ожидаете. Вы также можете использовать _GET, если хотите, просто включите его явно.   -  person Frankie    schedule 12.08.2010
comment
@zerkms, чтобы предотвратить некоторые плохие практики вокруг них.   -  person Sebastián Grignoli    schedule 12.08.2010
comment
Я столкнулся с той же проблемой без фреймворка, и mod_rewrite был включен. Это произошло потому, что я создавал URL-адрес вручную и задавал хеш-код перед запросом GET, и поэтому запрос GET был распознан как часть хеш-строки.   -  person Vahid Amiri    schedule 02.09.2016
comment
Для людей, использующих apache, эта ошибка также возникает, когда в корневом каталоге существует папка, имя которой соответствует пути перезаписи, эффективно поглощая параметры GET. Проверьте соответствие имени папки и переименуйте ее как test.   -  person MyStream    schedule 14.03.2019


Ответы (4)


Когда я сталкиваюсь с чем-то, что ставит меня в тупик, я всегда довожу свой сценарий до основ. Попробуйте это в самом верху вашего скрипта:

var_dump($_GET);
exit;

Затем вы можете увидеть, действительно ли он получает vars от хука. Если нет, то может быть что-то более глубокое... например, действительно ли PHP работает с Apache? Если это работает, начните добавлять другие вещи, пока это снова не остановится, и вы не сможете начать сужать виновника.

person Chuck Burgess    schedule 12.08.2010
comment
привет, я получаю дамп var как пустой массив.. теперь, как это отлаживать...?? Я добавил значения в URL - person Fr_nkenstien; 13.06.2014
comment
Это означает, что по запросу GET ничего не приходит. Попробуйте $_REQUEST. Вы уверены, что не публикуете? - person Chuck Burgess; 14.06.2014

Перемещение этого в ответ из моих комментариев выше. Две причины, по которым ваши параметры GET могут отсутствовать. Либо у вас настроен режим перезаписи, который удаляет их, либо вы используете фреймворк, такой как CodeIgniter, который перемещает их в другое место.

Если вы используете CodeIgniter, вы можете снова включить их с помощью parse_str($_SERVER['QUERY_STRING'], $_GET);

person Matt Williamson    schedule 12.08.2010
comment
распечатка $_SERVER['QUERY_STRING'] на самом деле может быть неплохим местом для начала, независимо от фреймворка. - person aaronasterling; 12.08.2010
comment
Я хотел бы добавить, что для некоторых фреймворков/CMS причина может заключаться в том, что mod_rewrite не включен. - person Pawel Dubiel; 02.05.2012

Убедитесь, что ваш файл php.ini не устанавливает max_input_vars в 0. Я случайно установил для себя что-то другое, поэтому добавление чего-либо в $_GET создало предупреждение PHP.

person user1345650    schedule 19.07.2014

я столкнулся с аналогичной проблемой $_GET[] пусто. в основном из-за проблем с сервером где-то, и мне пришлось сгенерировать свой собственный $GET, используя $_SERVER['HTTP_REFERER'].

//url='http://example.com/?search=john&location=london';
$get=array();
$query=mb_split("&",parse_url($_SERVER['HTTP_REFERER'],PHP_URL_QUERY));
if(!empty($query)) foreach ($query as $qr){
    $vars=mb_split('=',$qr);
    $get[$vars[0]]=$vars[1];
}

var_dump($get['search']);
// output 'john'
person Mugasho Lincoln    schedule 29.08.2020