2016-03-22 2 views
1

У меня возникла проблема с веб-приложением php. Он перестает работать после 10-20 часов без причины, потому что $_GET не определен.Неопределенная переменная _GET

Запрос выглядит следующим образом:

http://host/index.php?id=1 

индексный файл имеет лил фрагмент кода, как:

if (isset($_GET['id']) && is_numeric($_GET['id'])) { 
    $id = intval($_GET['id']); 
} else { 
    die('wrong id'); 
} 

var_dump из $_GET возвращается NULL. Параметр var_dump $_SERVER показывает, что REQUEST_METHOD - это GET, а QUERY_STRING - id = 1. A var_dump() из $_REQUEST показывает id => 1, так что это только $_GET, что не работает.

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

Система Windows 2008 R2, Apache 2.4.18 32 Bit/PHP 7.0.4 32 бит.

+1

Похоже, есть что-то неправильно на сервере? – Epodax

+0

Alankar More в соответствии с руководством по php.net «Эта функция была DEPRECATED с PHP 5.3.0 и удалена с PHP 5.4.0». Поэтому он не должен иметь отношения к установке PHP 7.0.4. Кроме того, это в основном php-production.ini по умолчанию с некоторыми незначительными изменениями (пути, время выполнения, расширения gd2, mbstring, oci8, charset и настройки даты/времени). – aLpenbog

+0

Я знаю, что это очевидный вопрос, но есть ли что-нибудь в журнале ошибок Apache/PHP? Что произойдет, если вы попробуете [$ HTTP_GET_VARS] (http://www.php.net/manual/en/reserved.variables.get.php) (а не суперглобальный и устаревший) вместо '$ _GET'? – Egg

ответ

0

Использование функции is_numeric в отношении значения GET, которое не установлено, может привести к ошибке и остановить ваш скрипт.

Убедитесь, что значение GET установлено перед использованием на нем функции is_numeric.

if(!isset($_GET['id'])) 
{ 
    die('wrong id'); 
} 
elseif(is_numeric($_GET['id'])) 
{ 
    $id = intval($_GET['id']); 
} 
else 
{ 
    die('wrong id'); 
} 
+0

есть isetet перед проверкой is_numeric. Если _GET не установлен, он выскочит из этого случая и не будет проверять числовые. – aLpenbog

+0

Если isset и is_numeric находятся в одном и том же операторе if, то is_numeric будет использоваться, даже если значение GET не установлено – ValidSolutions

+0

Это интересно, потому что если я запускаю оператор if с isset ($ _ GET ['id']) && is_numeric ($ _ GET ['id']) без предоставления идентификатора. Я не получаю ошибок, и оператор if просто пропущен. Когда я удаляю isset, я получаю уведомление: неопределенный индекс: id в C: \ ApachePHP \ htdocs \ index.php в строке 2. Если то, что вы сказали, верно, я не понимаю, почему я не получаю уведомление в любом случае. – aLpenbog