دورة PHP الآثار الجانبية تحذير مع المتغيرات العالمية كمصدر بيانات

StackOverflow https://stackoverflow.com/questions/175091

سؤال

أنا أحاول أن استضافة PHP موقع ويب التي أعطيت لي.أرى أن هذا التحذير:

تحذير: غير معروف:البرنامج النصي الخاص بك ربما يعتمد على الدورة الآثار الجانبية التي موجودة حتى PHP 4.2.3.يرجى أن يكون علما بأن جلسة التمديد لا تعتبر المتغيرات العالمية كما مصدر البيانات ، ما لم register_globals تمكين.يمكنك تعطيل هذه الوظيفة و هذا تحذير من وضع الدورة.bug_compat_42 أو الدورة.bug_compat_warn إلى الخروج ، على التوالي.في غير معروف على الخط 0

ماذا يعني هذا ؟ كيف يمكنني تعقب مصدر هذه المشكلة في الكود ؟

هل كانت مفيدة؟

المحلول

أساسا لديك متغير مع نفس اسم جلسة العمل الخاصة بك.مثلا:

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

والتي سوف إعادة إنشاء هذا الخطأ.يمكنك التوقف PHP من محاولة العثور على القائمة المتغيرات تحذير لك عن طريق إضافة هذه الأسطر إلى البرنامج النصي الخاص بك:

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

هذه القيم يمكن تعيين في php.ini أو .هتكس كذلك

نصائح أخرى

يبدو أن هناك عدد قليل من إشكالية الإمكانيات هنا:

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;

هذا هو معلومات جيدة عن معرفة ما يسبب تحذير, ولكن أنصح بعدم إيقاف التحذيرات أوين يذكر.هذه runtime وظائف إزالة في PHP 5.4.0 و يجب على المطور في ممارسة تجنب هذا الاستخدام من المتغيرات.

لحل هذه المشكلة, قد يكون الألم على المطورين تنتهي ، ولكن إذا كان لديك

$_SESSION["user"]
$user;

إعادة تسمية الدورة

$_SESSION["sessuser"];

أو العكس بالعكس طالما الدورة اسم و اسم المتغير مختلفة.التفكير في الأمر بهذه الطريقة:عند الترقية إلى الإصدار الأحدث, سيكون لديك لتصحيح التعليمات البرمجية الخاصة بك على أية حال.

عند إجراء تغييرات .هتكس ini_set لا يعمل.سوف تحتاج إلى القيام بذلك كما يلي:

php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0

في حالتي, php.ini تتغير من يوم إلى إيقاف

مثل هذا :

session.bug_compat_42 = off
session.bug_compat_warn = off

إذا كان لا يعمل إعادة تشغيل أباتشي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top