2016-03-22 31 views
1

Bir php web uygulama ile ilgili bir sorunum var. Hiçbir nedenle 10-20 saat sonra çalışmayı durdurur çünkü $_GET tanımlanmamıştır.Tanımsız değişken _GET

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

$_GET getiri NULL bir var_dump: dizin dosyası gibi bir lil kod parçacığını sahip

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

: gibi

istek görünüyor. $_SERVER var_dump, REQUEST_METHOD GET ve QUERY_STRING kimlik = 1 gösterir. var_dump(), $_REQUEST, id => 1 gösterir, bu nedenle çalışmayan yalnızca $_GET.

Bu olduğunda, sunucudaki tüm kullanıcılar ve tüm kullanıcılar için olur. Web sunucusunu yeniden başlattıktan sonra her şey birkaç saatliğine yeniden çalışıyor ...

Sistem Windows 2008 R2, Apache 2.4.18 32 Bit/PHP 7.0.4 32 Bit.

+1

Sesler? – Epodax

+0

Alankar Daha fazla php.net kullanım kılavuzuna göre "Bu özellik PHP 5.3.0'dan itibaren DEPRECATED ve PHP 5.4.0'dan itibaren kaldırıldı." Yani bir PHP 7.0.4 yüklemesi için uygun olmamalı. Bunun yanında, bazı küçük modifikasyonlara sahip varsayılan php-production.ini (yollar, yürütme zamanı, uzantılar gd2, mbstring, oci8, karakter kümesi ve tarih/saat ayarları) oldukça fazladır. – aLpenbog

+0

Bunun açık bir soru olduğunu biliyorum, ancak Apache/PHP hata günlüğünde bir şey var mı? [$ _GET] yerine [$ HTTP_GET_VARS] (http://www.php.net/manual/en/reserved.variables.get.php) (süper küresel değil ve kullanımdan kaldırılmış) denerseniz ne olur? – Egg

cevap

0

Ayarlanmamış GET değerindeki is_numeric işlevini kullanma bir hata verebilir ve komut dosyasını durdurabilir.

GET değeri, üzerinde is_numeric işlevini kullanmadan önce ayarlandığından emin olun.

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

is_numeric kontrolünden önce bir isset var. _GET ayarlanmadıysa, durumun dışına çıkar ve sayısal olup olmadığını kontrol etmez. – aLpenbog

+0

Eğer isset ve is_numerik ifadeleri aynıysa, GET değeri ayarlanmamış olsa bile is_numeric yine de kullanılır – ValidSolutions

+0

Bu, eğer bir if deyimini isset ile çalıştırırsam ($ _ GET ['id']) && is_numeric ($ _ GET) ['id']) bir kimlik sağlamadan hata alamıyorum ve if ifadesi atlandı. Isset'i kaldırdığımda Uyarı: Tanımlanmamış dizin: C: \ ApachePHP \ htdocs \ index.php içinde satır 2'de. Eğer söyledikleriniz doğruysa, neden haber alamıyorum anlamıyorum. – aLpenbog

İlgili konular