我一直在使用PHP5.3.8一段時間,我剛剛遇到了一個新的錯誤;PHP聲明全局變量和會話變量
警告:未知:您的腳本可能依賴於一個會話的副作用 它一直存在到PHP 4.2.3。請注意,會話 擴展不會將全局變量視爲數據源, 除非register_globals已啓用。您可以分別通過將session.bug_compat_42或 session.bug_compat_warn設置爲off來禁用此功能 和此警告。在未知的在線0
對此有一個解決方案; PHP session side-effect warning with global variables as a source of data。
但是,我仍然不明白爲什麼這種情況正在發生。據我所知,$foo
和$_SESSION['foo']
之間應該沒有含糊之處?
我試過在網上測試一些腳本,人們說這個錯誤,但他們不會在我的系統上拋出警告,我得到這個警告的腳本是hella複雜和剝離它下降到幾行以便重現錯誤是有問題的。
但是,我已經縮小到一行;
$bonus = isset($_GET['bonus']) ? $_GET['bonus'] : '';
$_SESSION['bonus']
設置爲null
在以前的頁面,距今約PHP4.2 register_globals的東西已經被關閉,所以不可能是$ _GET範圍。
所以這回到我的第一點;爲什麼突然出現$bonus
和$_SESSION['bonus']
之間的問題?我突然說,因爲我在另一個網站(同一個盒子)上使用這個確切的腳本,並且我沒有任何錯誤。
有人能指點我到任何地方,也許更詳細地解釋PHP如何處理會話變量等,爲什麼有兩個變量之間的問題?
謝謝。
[更新]
看這裏; PHP Runtime Configuration它提到:
[PHP有...]一個未公開的特性/錯誤,它允許您在全局範圍內初始化一個會話變量 ...
我想有可能除此之外,別再多說了。它只是似乎很奇怪,我認爲PHP與$_SESSION['foo']
/$foo
問題時,$_SESSION['foo'] != $foo
...
這個問題對我來說還不夠清楚。 – 2013-05-03 10:28:00
@HermannStephaneNtsamo的問題是;爲什麼聲明與會話變量同名的變量會引發此警告? – Stu 2013-05-03 10:40:02