Domanda

Ho ereditato un sito cliente che si blocca ogni 3 o 4 giorni.È costruito utilizzando il framework zend di cui non ho conoscenza.

Il seguente codice:

<?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');

Sta causando il seguente errore:

[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 

Non so nemmeno da dove cominciare per provare a risolvere questo problema.Il mio livello di conoscenza di PHP è intermedio ma come ho detto non ho esperienza con Zend.Inoltre, contattare lo sviluppatore originale non è un'opzione.

La cosa interessante è che anche se il codice viene eseguito ogni volta che viene raggiunta una pagina del sito, l'errore si verifica solo ogni tanto.

Credo che abbia qualcosa a che fare con include_path ma non ne sono sicuro.

È stato utile?

Soluzione

per cominciare penso che il tuo percorso di inclusione dovrebbe forse avere una barra finale.Ecco un mio esempio:

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

Il tuo file bootstrap verrà incluso in un altro file (probabilmente un file index.php).Ciò significa che se il percorso di inclusione è relativo (come il mio) anziché assoluto, il percorso in cui viene cercato Loader.php cambia se cambia il file che include bootstrap.php.

Ad esempio, ho due file index.php nella mia app Zend, uno per il front-end e uno per l'area di amministrazione.Ciascuno di questi file di indice necessita del proprio bootstrap.php con percorsi relativi diversi perché sono inclusi da file di indice diversi, il che significa che devono essere relativi al file indice richiesto originale, non al file bootstrap in cui sono definiti.

Questo potrebbe spiegare perché il tuo problema è intermittente, potrebbe esserci un altro file che include il bootstrap da qualche parte che viene utilizzato solo occasionalmente.Cercherei "bootstrap.php" in tutti i file dei siti e vedrei tutti i luoghi che includono/richiedono questo file.

Altri suggerimenti

Il fatto che accada solo sporadicamente mi fa pensare che non si tratti tanto di un problema di programmazione quanto più di un problema di amministratore di sistema: se fosse un difetto nell'implementazione, ti aspetteresti che fallisca costantemente considerando che l'errore è "No such file o directory".Due ipotesi

  • Sono presenti più server Web front-end e uno di essi è configurato in modo errato (manca Zend Framework).

  • La directory di inclusione PEAR è montata in rete e occasionalmente scompare per brevi periodi di tempo.

Potrebbe trattarsi di un problema più insidioso del file system, ma si potrebbe pensare che ciò influisca su più di un solo file.

Ho avuto lo stesso problema, ma il problema riguardava i permessi sui file.Ho dato chmod per tutti gli RWX e ora va tutto bene.

Quindi forse qualcun altro avrà il mio stesso problema, quindi questa era la soluzione.

Saluti

A volte funziona, quindi non c'è nulla di intrinsecamente sbagliato a livello PHP (se il percorso fosse sbagliato non funzionerebbe mai...ma è così, sì?).Quindi cosa rende Loader.php periodicamente inaccessibile?Sospetterei un problema di permessi.Qualcosa che rende inaccessibile Loader.php o la directory in cui si trova.Forse un processo cron sta impostando/reimpostando le autorizzazioni?Controllalo prima.Scopri quali sono i permessi quando funziona e cosa sono quando non lo è.

Nel mio caso Zend/Loader.php non era nella directory PEAR.Dovrebbe essere lì, ma il mio server web era un po' grezzo.Ma puoi anche inserirlo nella directory libreria/Zend.

Ma in realtà questo non spiega perché il tuo problema si verifica solo occasionalmente.

Ho avuto questo errore anche quando lavoravo con PHPUnit 3.5.5.Lo script della mia applicazione principale ha caricato correttamente il framework zend, tuttavia la classe di test ha riscontrato errori.

La mia soluzione era aggiungere quanto segue alla classe di test

   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();
        }
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top