Bir veri kaynağı olarak küresel değişkenler ile PHP oturum yan etkisi uyarı

4 Cevap php

Ben bana verilen bir PHP web sitesini barındırması çalışıyorum. Ben bu uyarıyı bkz:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

Bu ne anlama geliyor? Nasıl kodundaki bu sorunun kaynağını izini olabilir?

4 Cevap

temelde size oturumu olarak aynı ada sahip bir değişken var. ex:

$_SESSION['var1'] = null;
$var1 = 'something';

Bu hata yeniden hangi. varolan değişkenleri bulmak için çalışıyor ve sizin komut şu satırları ekleyerek onlar hakkında uyarı PHP'nin durabilir:

ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);

Bu değerler de php.ini ya. htaccess olarak ayarlanabilir

Burada birkaç sorunlu olasılık var gibi görünüyor:

http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect

diyor bu gibi durumlarda:

$_SESSION['firstname']=$_REQUEST['firstname'];

uyarı biz yukarıdaki durumda beklenmeyen bir davranış alabilir anlamına gelebilir ki, bir veri kaynağı olarak küresel değişkenler dikkate almaz söylüyor çünkü endişe verici uyarı tetikleyecek.

Ben bu php bug içeriğini yorumlamak: http://bugs.php.net/bug.php?id=41540 henüz başlatılmadı oturum süper küreseli bir değişken, örneğin atarken bu hata da oluşabilir demek

//Start of script
$_SESSION['bob'] = $bob;

Bu uyarıyı neyin neden olduğunu bulmaya iyi bir bilgi, ama Owen bahseder uyarıları kapatarak değil tavsiye ederim. Bu çalışma zamanı fonksiyonlar removed in PHP 5.4.0 ve geliştirici değişkenlerin bu tür kullanımını önleme uygulamaya almalısınız.

Bunu düzeltmek için, varsa geliştiriciler ucunda bir ağrı olabilir, ancak

$_SESSION["user"]
$user;

için oturumu yeniden adlandırın

$_SESSION["sessuser"];

Ya da sadece sürece oturum adı ve değişken adı olarak mengene-versa farklıdır. Şöyle düşünün: Eğer son sürüme yükseltme yaparken, nasıl olsa kodunuzu hata ayıklamak gerekir.

Eğer. Htaccess ini_set değişiklik yaparken çalışmıyor. Bunu gibi yapmanız gerekir:

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0