سؤال

وأنا على التوالي في symfony (1.2.9) مع PHP النسخة 5.2.11 على نظام التشغيل Windows XP.

ولقد APC تثبيت (الإصدار 3.0.19)

لا أستطيع تشغيل PHP النصي لإثبات أن تعمل بشكل صحيح APC (الأعمال). ومع ذلك، عندما أحاول استخدام APC يدعو في العمل في symfony، أحصل على هذا الخطأ (في ملف error.log اباتشي):

[APC-خطأ] لا يمكن redeclare الطبقة sfconfig

والذي تحطم على الفور أباتشي.

وحاولت استخدام المجمع في symfony sfAPCCache، ثم استدعاء مباشرة apc_ * وظائف - والنتيجة واحدة. لا أحد يعرف لماذا يحدث هذا؟

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

نصائح أخرى

واليوم يحدث هذا الخطأ بالنسبة لي، أيضا، وأنا أدرك لماذا يمكن أن يحدث (من بين أسباب أخرى محتملة).

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

وعلى سبيل المثال:

وكان لي الخطأ "الاستخدام" بيان في قانون بلدي، واستيراد فئة غير namespaced كما لو كان داخل مساحة الاسم.

والطبقة، ويقول "MyClass" كان في مساحة الاسم "\"، وهذا يعني أن الاسم الصحيح والمؤهل بالكامل كان "\ MyClass".

وعند نقطة ما كان يشار الطبقة إلى بالاسم غير المشروط "MyClass"، وحصلت على autoloaded. في ملف آخر I (خطأ) المشار إليها الطبقة مع بادئة مساحة الاسم في بيان استخدام، ويقول "استخدام \ SomeNamespace \ MyClass.". ونتيجة لذلك كانت الطبقة (مرة أخرى) التي تم تمريرها إلى بلدي __autoload العالمية () الأسلوب، ولكن باسم مختلف. لجعل الأمور أسوأ، كان أسلوب autoload ذكي بما فيه الكفاية للعثور على الطبقة على أي حال.

وعلى الفور توقف مخطوطتي العمل وكان كل ما حدث APC الكتابة "[APC-خطأ] لا يمكن redeclare الدرجة ..." إلى خادم الويب اباتشي error.log. كانت صفحاتي لم تعد متوفرة.

وهذه ليست علة APC على الإطلاق، ولكن السلوك ببساطة الصحيح.

في حالتي أنه يساعد على تعطيل مؤقتا APC (بحيث سيتم تشغيل مخطوطتي بغض النظر عن الصراع)، وربط بيان صدى في بلدي وظيفة __autoload إنتاج قائمة من المعلمات التي تم تمريرها. ان الطبقة محملة اسم خاطئ تظهر بسرعة، وأنا لا يمكن إصلاحه وإعادة تمكين APC.

وآمل أن يساعد هذا شخص.

وكان إيف هذا الخطأ قبل لا علاقة لها APC وساعد دائما لتشغيل وليس فقط ذاكرة التخزين المؤقت: واضح ولكن أيضا للتحقق والتأكد من تم حذف كافة الملفات من دير ذاكرة التخزين المؤقت.

وكنت أعيش نفس الوضع على النوافذ تطوري نظام مع بي 5.2.11 والعديد من الإصدارات APC. نفسه الوضع كما هو موضح، ويعمل القانون الأساسي = 0 كل شيء، ولكن عندما أضع القانون الأساسي = 1، وتعطل اباتشي مع الخطأ "لا يمكن الطبقة redeclare [بعض الطبقة] ". وتعمل على كود نظام ويندوز المختلفة، وبجانبه هو العيش على بالسلاح تحميل خادم إنتاج لينكس لعدة أشهر. أنا متأكد من٪ 100 ليس هناك علة تتعلق APC. أنها بدأت على الجهاز الخاص بي بعد أن إعادة تثبيت نظام التشغيل الخاص بي.

وقضيت بعض الوقت معلقا بها وتشمل بعض الطبقة و أدركت أنه يعمل مع إدراج بعض الملفات ولكن ليس مع منها محددة. راجعت قانون بلدي لا يوجد ملحوظ الفرق على الفوارق الطبقية.

وثم انني أنقذت كل من بلدي تضمين الملفات مع إضافة بعض الفراغات إضافية مع محرر زند استوديو. يبدو غبي وأنا أعلم ولكنه يعمل !!! أنا أعمل على المشروع مع عدة أشخاص واستخدام إس ويستخدم الجميع مختلف برامج تحرير النصوص مثل المفكرة ++، إديت بلس الخ ...

ولكن لم أتمكن من إعادة إنشاء الخطأ خلال محاولة إنقاذ ملف مع بعض المحررين مختلفة مع التكوينات المختلفة مثل الانسي، UTF8 مع / بدون ترتيب البايت علامة غير ذلك ولكن أنا متأكد مشكلتي هي شيء متعلق ملف تنسيق (الترميز، الكمبيوتر / وضع يونيكس). أود أن إنشاء الخطأ وتريد إعطاء معلومات أكثر تفصيلا لكنني حاولت حل بي على آخر مشروع مع نفس المشكلة، وأنها تعمل أيضا.

وآمل أن أتمكن من إعطاء منظور آخر لهذه القضية.

وماذا حل هذه بالنسبة لي هو التأكد من بلدي يتطلب كان نفس المسار.

وعلى سبيل المثال، الخطأ حصلت و:
[apc-error] Cannot redeclare class someClass

في ملف وكان لي ما يلي:
require_once '/path/to/someClass.php';

في ملف B الذي يتواجد في نفس الدليل someClass.php كان لي ما يلي:
require_once 'someClass.php';

وأعتقد أن APC التخزين المؤقت لم يفهموا انهم نفس الملف لأنه تم تحديد مسار واحد وليس غيرها.

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