2008-10-06 12 views
42

मैं एक PHP वेब साइट होस्ट करने की कोशिश कर रहा हूं जो मुझे दिया गया था। मैं यह चेतावनी दिखाई:डेटा के स्रोत के रूप में वैश्विक चर के साथ PHP सत्र साइड-इफेक्ट चेतावनी

चेतावनी: अज्ञात: आपकी स्क्रिप्ट संभवतः एक सत्र पक्ष प्रभाव जो पीएचपी 4.2.3 तक अस्तित्व पर निर्भर करता है। कृपया सलाह दी गई है कि सत्र एक्सटेंशन वैश्विक चर को डेटा के स्रोत के रूप में नहीं मानता है, जब तक कि register_globals सक्षम नहीं है। क्रमशः को बंद करने के लिए session.bug_compat_42 या session.bug_compat_warn सेट करके इस कार्यक्षमता को अक्षम कर सकता है और यह चेतावनी अक्षम कर सकता है। लाइन

पर अज्ञात में इसका क्या मतलब है? कोड के भीतर इस समस्या के स्रोत को मैं कैसे ट्रैक कर सकता हूं?

उत्तर

98

मूल रूप से आपके पास अपने सत्र के समान नाम वाला चर होता है। पूर्व:

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

जो इस त्रुटि को पुन: उत्पन्न करेगा। आप मौजूदा चर लगता है और उनके बारे में आप अपनी स्क्रिप्ट में ये पंक्तियां जोड़कर चेतावनी की कोशिश कर रहा से पीएचपी बंद कर सकते हैं:

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

इन मूल्यों php.ini में सेट किया जा सकता है या के रूप में अच्छी

+0

वर्क्स एक आकर्षण की तरह पुनः आरंभ अपाचे! थम्स अप! – Anunay

+2

उन लोगों के लिए जो php.ini फ़ाइलों को संशोधित करने में महान नहीं हैं, ऊपर दिया गया प्रारूप वह नहीं है जिसका आप उपयोग करते हैं। यह एक पंक्ति पर "session.bug_compat_42 = 0" और "session.bug_compat_warn = 0" होना चाहिए (कोई उद्धरण नहीं)। हालांकि, पहले अपनी php.ini फ़ाइल में एक खोज करें। ऐसा लगता है कि दोनों को पहले से ही 1 के रूप में परिभाषित किया गया है और आपको बस 0 पर स्विच करने की आवश्यकता है – rgbflawed

6

वहाँ लग .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 का अर्थ यह है कि यह त्रुटि तब भी हो सकती है जब आप सत्र superglobal में एक चर निर्दिष्ट करते हैं जो अभी तक प्रारंभ नहीं हुआ है, उदा।

//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 

अगर काम नहीं कर रहा,

संबंधित मुद्दे