2008-10-06 66 views
42

我試圖託管一個給我的PHP網站。我看到這樣的警告:以全局變量作爲數據源的PHP會話副作用警告

警告:未知:您的腳本可能 依靠其 存在,直到PHP 4.2.3會話副作用。請建議 建議會話擴展 不考慮全局變量作爲 數據源,除非 register_globals已啓用。您可以通過 將session.bug_compat_42或 分別設置爲關閉, 來禁用此功能,並且此 警告。在上線

未知這是什麼意思?我如何在代碼中追蹤這個問題的根源?

回答

98

基本上你有一個與你的會話同名的變量。例如:

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

這將重現此錯誤。你可以試圖找到現有的變量,並通過添加這些行到你的腳本警告你他們停止PHP:

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

這些值可以在php.ini中設置或的.htaccess以及

+0

就像一個魅力!豎起大拇指! – Anunay 2013-07-02 15:44:50

6

似乎有是少數有問題的可能性在這裏:

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

說,情況是這樣的:

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

將觸發警告。

此外,我解釋這個PHP錯誤內容:http://bugs.php.net/bug.php?id=41540意味着,當您將變量分配給尚未初始化的會話超全局變量時,也可能發生此錯誤,例如,

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

當您對.htaccess進行更改時,ini_set不起作用。您需要做的是:

php_flag session.bug_compat_42 0 
php_flag session.bug_compat_warn 0 
5

這是找出是什麼導致了警告良好的信息,但我會建議不要切斷警告歐文提及。這些運行時功能是removed in PHP 5.4.0,開發人員應該嘗試避免使用這些變量。

爲了解決這個問題,它可能是在開發端的痛苦,但如果你有

$_SESSION["user"] 
$user; 

會議反之亦然一樣長重命名爲

$_SESSION["sessuser"]; 

或者作爲會話名稱和變量名稱不同。這樣想吧:當你升級到最新版本時,無論如何你必須調試你的代碼。

1

在我的情況下,改變的php.ini從開到關

這樣的:

session.bug_compat_42 = off 
session.bug_compat_warn = off 

如果不工作,重新啓動Apache