دورة PHP الآثار الجانبية تحذير مع المتغيرات العالمية كمصدر بيانات
-
05-07-2019 - |
سؤال
أنا أحاول أن استضافة 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
إذا كان لا يعمل إعادة تشغيل أباتشي