يفشل إعداد مسار التضمين في PHP بشكل متقطع
-
09-06-2019 - |
سؤال
لقد حاولت كلا من:
ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');
و أيضا :
php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"
في ملف .htaccess.
كلتا الطريقتين في الواقع اعمل ولكن بشكل متقطع فقط.أي أنها ستعمل بشكل جيد مع طلبات 37 صفحة تقريبًا ثم تفشل في طلب 42 صفحة تقريبًا مما يؤدي إلى استدعاء require() للتسبب في حدوث خطأ فادح يؤدي إلى تعطل الموقع بشكل فعال.
لست متأكدًا حتى من أين أبدأ في محاولة معرفة ما يجري!
يبدو أنك قمت بتكرار الدليل الحالي في مسار التضمين الخاص بك.حاول إزالة أحد ".:" من السلسلة الخاصة بك.
النسخة الموجودة في البرنامج النصي كانت في الأصل
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
وهكذا .:.:كان قادمًا من المسار الحالي:
ini_get('include_path')
حاولت إزالته على أي حال وما زالت المشكلة قائمة.
المحلول
اتضح أن المشكلة كانت مرتبطة بخلل PHP في الإصدار 5.2.5
أدى تعيين "admin_flag" لـ include_path إلى أن يكون مسار التضمين فارغًا في بعض الطلبات، ويقوم Plesk بتعيين admin_flag في التكوين الافتراضي لشيء ما أو غيره.تحديث PHP حل المشكلة.
نصائح أخرى
هل جربت set_include_path()؟.كميزة، يُرجع هذا الخطأ خطأ عند الفشل، مما يسمح لك على الأقل برصد حدوث هذا الخطأ وإنشاء بعض بيانات تصحيح الأخطاء ذات المعنى.بالإضافة إلى ذلك، يجب عليك استخدام الثابت PATH_SEPARATOR
كما يختلف بين النوافذ / * لا شىء.
كمثال محدد:
set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());
(يعني get_include_path() في النهاية أن أي مسار ini / htaccess الذي تم تعيينه عليه سيبقى)
يبدو أنك قمت بتكرار الدليل الحالي في مسار التضمين الخاص بك.حاول إزالة أحد ".:" من السلسلة الخاصة بك.