2016-03-22 26 views
1

PHP Webアプリケーションで問題が発生しました。 $_GETが定義されていないため、理由なく10〜20時間後に動作を停止します。未定義の変数_GET

要求は次のようになります。

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

$_GETリターンNULLののvar_dump:

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

インデックスファイルのようなlilのコードスニペットを持っています。 $_SERVERのvar_dumpは、REQUEST_METHODがGETであり、QUERY_STRINGがid = 1であることを示しています。 var_dump()$_REQUESTはid => 1を示しているので、それは機能していないのは$_GETです。

これが起こると、サーバー上のすべてのWebアプリケーションとすべてのユーザーに発生します。ウェブサーバの再起動後、何時間も何度も何度も作業しています...

システムはWindows 2008 R2、Apache 2.4.18 32ビット/ PHP 7.0.4 32ビットです。

+1

サウンズ? – Epodax

+0

Alankarもっと詳しくphp.netのマニュアルによると "この機能はPHP 5.3.0以降では廃止され、PHP 5.4.0では削除されました。"したがって、PHP 7.0.4のインストールには関係ありません。それに加えて、いくつかのマイナーな変更(パス、実行時間、拡張子gd2、mbstring、oci8、charset、および日付/時刻設定)を含む、ほとんどのデフォルトのphp-production.iniがあります。 – aLpenbog

+0

これは明らかな質問ですが、Apache/PHPエラーログには何かがありますか? '$ _GET'の代わりに[$ HTTP_GET_VARS](http://www.php.net/manual/en/reserved.variables.get.php)(スーパーグローバルではなく非推奨)を試してみるとどうなりますか? – Egg

答えて

0

設定されていないGET値にis_numeric関数を使用するとエラーが発生し、スクリプトが停止することがあります。

is_numeric関数を使用する前にGET値が設定されていることを確認してください。

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

is_numericチェックの前にissetがあります。 _GETが設定されていないと、その場合にジャンプし、数値をチェックしません。 – aLpenbog

+0

issetとis_numericが同じif文内にある場合、GET値が設定されていなくてもis_numericが使用されます – ValidSolutions

+0

isset($ _ GET ['id'])&& is_numeric($ _ GET)を使用してif文を実行すると、 ['id'])idを指定せずにエラーが発生せず、if文だけがスキップされます。私がissetを削除するとき、私は通知を得る:定義されていないインデックス:2行目のC:\ ApachePHP \ htdocs \ index.phpのidあなたが言ったことが真であるなら、なぜ私はとにかく通知を得ないのか分からない。 – aLpenbog

0

あなたの$ _REQUESTのVaRは値を保持しますが、$ _GETが、そこにはバグレポートが提出されていない場合に:サーバー上の何かが間違っているようhttps://bugs.php.net/bug.php?id=73554