سؤال

لدي خادم مع العديد من العملاء، عندما أقوم بتطوير، أقوم بتضمين INIT.PHP الذي لدي __autoloader() وظيفة تتضمن الملف مع dir_name(__FILE__)."/classes/".$className على سبيل المثال.

ولكن أمس رأيت أن الخادم لا يمكن العثور على فئة محددة، وأعد تشغيل Apache ثم عملت مرة أخرى.

كل عميل لديه هذا init.php ... (وبالتالي الكثير __Autoloads على نفس الخادم)

customer1 / init.php: holds __autoload () customer1 / classes / class.php customer2 / init.php: holds __autoload () customer2 / الفئات / class.php

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

هل SPL_AUTOLOAD_REGISTER الحل؟

شكرا جزيلا لبعض الأفكار أو العصف الذهني.

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

المحلول

تخميني هو أنه يجب أن يكون لديك خطأ مطبعي في أحد وظائف __Autoload () أو كنت بما في ذلك ملف init.php الخطأ.

أيضا، dire_name () غير موجود، يجب عليك تغيير ذلك ل وسمك() بدلا من ذلك أو يمكنك أيضا استخدام الجديد دير مستمر لنفس التأثير إذا كنت تستخدم PHP> = 5.3.

تعديل: في ضوء تعليقك، يجب استخدام الاستخدام:

require(realpath(dirname(__FILE__)) . '/classes/' . $className);

أو

require(realpath(__DIR__) . '/classes/' . $className);

نصائح أخرى

كل طلب PHP منفصل تماما، في الواقع، من المستحيل بالنسبة لك أن يكون لديك وظيفة اسمها __autoload() في نفس طلب PHP، لذلك لا يمكن أن تتداخل. المشاكل المحتملة:

  • أنت بما في ذلك العميل الخطأ init.php
  • نسيت أن تضم init.php ملف، في هذه الحالة هناك رقم التحميل الاستوائي على الإطلاق.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top