سؤال

لقد ورثت موقع العميل التي تعطل كل 3 أو 4 أيام.أنها بنيت باستخدام زند-الإطار الذي لا علم.

التعليمة البرمجية التالية:

<?php
    // Make sure classes are in the include path.
   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    // Use autoload so include or require statements are not needed.
    require_once 'Zend/Loader.php';
    Zend_Loader::registerAutoload();

    // Run the application.
    App_Main::run('production');

تسبب الخطأ التالية:

[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Warning: require_once(Zend/Loader.php) [function.require-once]: failed to open stream: No such file or directory in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6 
[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Fatal error: require_once() [function.require]: Failed opening required 'Zend/Loader.php' (include_path='.:.:/usr/share/php5:/usr/share/php5/PEAR') in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6 

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

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

وأعتقد أنه يجب أن يكون أن تفعل شيئا مع include_path ولكن لست متأكدا.

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

المحلول

في البداية أعتقد أن تشمل المسار يجب أن ربما يكون مائل زائدة.هنا مثال من الألغام :

    set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/'); 

التمهيد الملف سيتم تضمينها من قبل ملف آخر (ربما index.php ملف).هذا يعني أنه إذا كان لديك تشمل مسار نسبي (مثل الألغام) بدلا من المطلق ، ثم المسار الذي Loader.php هل بحثت عن التغييرات إذا كان الملف بما في ذلك bootstrap.php التغييرات.

على سبيل المثال لدي اثنين index.php الملفات في زند التطبيق ، الأمامية و منطقة مشرف.هذه ملفات فهرس كل حاجة هناك bootstrap.php مع مختلف المسارات النسبية في لأنها شملت مختلف فهرسة الملفات ، مما يعني أنها يجب أن تكون نسبة إلى الأصلي طلب مؤشر الملف ليس ملف التمهيد يتم تعريفها داخل.

وهذا يمكن أن يفسر لماذا هي مشكلتك متقطعة ، يمكن أن يكون هناك ملف آخر بما في ذلك التمهيد في مكان ما أن يستخدم فقط في بعض الأحيان.أود البحث من خلال جميع مواقع الملفات 'bootstrap.php و ترى كل الأماكن التي يتم منها / يتطلب هذا الملف.

نصائح أخرى

حقيقة أنه لا يحدث إلا بشكل متقطع يجعلني أعتقد أن هذا هو أقل من البرمجة المسألة أكثر من مسؤول النظام مسألة - إذا كان الخلل في التنفيذ ، كنت تتوقع أن تفشل باستمرار النظر في الخطأ "لا يوجد مثل هذا الملف أو الدليل".اثنين من التخمينات

  • هناك عدة الأمامية ملقمات ويب, واحد منهم هو سوء تكوين (عداد المفقودين الإطار زند).

  • الكمثرى تشمل دليل شبكة يعلو, و أحيانا يختفي لفترات قصيرة من الوقت.

يمكن أن يكون أكثر غدرا نظام الملفات المشكلة ولكن أعتقد أن هذا سيكون له تأثير أكثر من ملف واحد فقط.

كان عندي نفس المشكلة, ولكن المشكلة كانت في permissons إلى الملفات.أعطى التصريح لجميع RWX والآن كل شيء على ما يرام.

ربما شخص آخر سوف يكون نفس المشكلة لي ، ثم كان هذا الحل.

تحياتي

يعمل في بعض الأحيان لذلك ليس هناك أي شيء خطأ في حد ذاته على PHP نهاية الأشياء (إذا كان المسار كان خطأ لن تعمل...لكنه لا؟).حتى ما يسبب Loader.php أن تكون بشكل دوري لا يمكن الوصول إليها?وأظن أن مشكلة أذونات.الشيء الذي يجعل Loader.php أو الدليل الذي هو في الوصول إليها.ربما وظيفة كرون هو إعداد/الإعادة الأذونات ؟ التحقق من ذلك أولا.ترى ما الأذونات عندما كان يعمل وما هي عندما لا يكون.

في حالتي Zend/Loader.php لم يكن في الكمثرى دليل.ينبغي أن يكون هناك ، ولكن خادم الويب بلدي قليلا الخام.ولكن يمكنك إدراجه في المكتبة/زند الدليل.

ولكن في الواقع هذا لا يجيب لماذا تحدث المشكلة فقط في بعض الأحيان.

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

الحل هو إضافة التالية إلى فئة الاختبار

   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    require_once 'ThemeWidgets.php';
    require_once 'PHPUnit/Framework.php';

    require_once '../../library/Zend/Loader/AutoLoader.php';


    class ThemeWidgetsTest extends PHPUnit_Framework_TestCase
    {

        public function setUp() {
            Zend_Loader_Autoloader::getInstance();
        }
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top