我試圖託管一個給我的PHP網站。我看到這樣的警告:以全局變量作爲數據源的PHP會話副作用警告
警告:未知:您的腳本可能 依靠其 存在,直到PHP 4.2.3會話副作用。請建議 建議會話擴展 不考慮全局變量作爲 數據源,除非 register_globals已啓用。您可以通過 將session.bug_compat_42或 分別設置爲關閉, 來禁用此功能,並且此 警告。在上線
未知這是什麼意思?我如何在代碼中追蹤這個問題的根源?
我試圖託管一個給我的PHP網站。我看到這樣的警告:以全局變量作爲數據源的PHP會話副作用警告
警告:未知:您的腳本可能 依靠其 存在,直到PHP 4.2.3會話副作用。請建議 建議會話擴展 不考慮全局變量作爲 數據源,除非 register_globals已啓用。您可以通過 將session.bug_compat_42或 分別設置爲關閉, 來禁用此功能,並且此 警告。在上線
未知這是什麼意思?我如何在代碼中追蹤這個問題的根源?
基本上你有一個與你的會話同名的變量。例如:
$_SESSION['var1'] = null;
$var1 = 'something';
這將重現此錯誤。你可以試圖找到現有的變量,並通過添加這些行到你的腳本警告你他們停止PHP:
ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);
這些值可以在php.ini中設置或的.htaccess以及
似乎有是少數有問題的可能性在這裏:
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;
當您對.htaccess進行更改時,ini_set不起作用。您需要做的是:
php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
這是找出是什麼導致了警告良好的信息,但我會建議不要切斷警告歐文提及。這些運行時功能是removed in PHP 5.4.0,開發人員應該嘗試避免使用這些變量。
爲了解決這個問題,它可能是在開發端的痛苦,但如果你有
$_SESSION["user"]
$user;
會議反之亦然一樣長重命名爲
$_SESSION["sessuser"];
或者作爲會話名稱和變量名稱不同。這樣想吧:當你升級到最新版本時,無論如何你必須調試你的代碼。
在我的情況下,改變的php.ini從開到關
這樣的:
session.bug_compat_42 = off
session.bug_compat_warn = off
如果不工作,重新啓動Apache
就像一個魅力!豎起大拇指! – Anunay 2013-07-02 15:44:50