2013-05-03 140 views
2

我一直在使用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 ...

+0

這個問題對我來說還不夠清楚。 – 2013-05-03 10:28:00

+0

@HermannStephaneNtsamo的問題是;爲什麼聲明與會話變量同名的變量會引發此警告? – Stu 2013-05-03 10:40:02

回答

1

嘗試設置session.bug_compat_42爲關閉,它將關閉功能的警告是關於。 C.F. http://php.net/manual/en/session.configuration.php

+0

嗨,Adder,感謝您的鏈接,我知道如何關閉警告,但我只是想了解更多關於它發生的原因,而不是忽略它。 – Stu 2013-05-03 10:52:21

+0

好吧,當我閱讀文檔時,如果該功能打開,您可以分配給全局'$ alert'來設置'$ _SESSION ['alert']'。 'session.bug_compat_42'不會關閉該功能的警告。 – Adder 2013-05-03 12:23:58

+0

啊很酷,ta解釋:) – Stu 2013-05-03 14:23:18