Échec du chargement de Zend/Loader.php.Vous essayez de comprendre pourquoi ?

StackOverflow https://stackoverflow.com/questions/39364

  •  09-06-2019
  •  | 
  •  

Question

J'ai hérité d'un site client qui plante tous les 3 ou 4 jours.Il est construit en utilisant le framework zend avec lequel je n'ai aucune connaissance.

Le code suivant :

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

Provoque l'erreur suivante :

[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 

Je ne sais même pas par où commencer pour essayer de résoudre ce problème.Mon niveau de connaissance de PHP est intermédiaire mais comme je l'ai dit, je n'ai aucune expérience avec Zend.De plus, contacter le développeur d’origine n’est pas une option.

Ce qui est intéressant, c'est que même si le code est exécuté à chaque fois qu'une page du site est consultée, l'erreur ne se produit que de temps en temps.

Je pense que cela doit être quelque chose à voir avec include_path mais je n'en suis pas sûr.

Était-ce utile?

La solution

pour commencer, je pense que votre chemin d'inclusion devrait peut-être avoir une barre oblique finale.Voici un exemple du mien :

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

Votre fichier d'amorçage sera inclus par un autre fichier (probablement un fichier index.php).Cela signifie que si votre chemin d'inclusion est relatif (comme le mien) au lieu d'absolu, alors le chemin sur lequel Loader.php est recherché change si le fichier incluant bootstrap.php change.

Par exemple, j'ai deux fichiers index.php dans mon application Zend, un pour le front-end et un pour la zone d'administration.Ces fichiers d'index ont chacun besoin de leur propre bootstrap.php avec des chemins relatifs différents car ils sont inclus dans différents fichiers d'index, ce qui signifie qu'ils doivent être relatifs au fichier d'index demandé d'origine, et non au fichier d'amorçage dans lequel ils sont définis.

Cela pourrait expliquer pourquoi votre problème est intermittent, il pourrait y avoir un autre fichier incluant le bootstrap quelque part qui n'est utilisé qu'occasionnellement.Je rechercherais « bootstrap.php » dans tous les fichiers du site et je verrais tous les endroits qui incluent/exigent ce fichier.

Autres conseils

Le fait que cela n'arrive que sporadiquement me fait penser qu'il s'agit moins d'un problème de programmation que d'un problème d'administrateur système - s'il s'agissait d'un défaut d'implémentation, vous vous attendriez à ce qu'il échoue systématiquement étant donné que l'erreur est "Aucun fichier de ce type". ou répertoire".Deux suppositions

  • Il existe plusieurs serveurs Web frontaux, et l'un d'eux est mal configuré (il manque le Zend Framework).

  • Le répertoire d'inclusion PEAR est monté sur le réseau et disparaît occasionnellement pendant de courtes périodes.

Il pourrait s'agir d'un problème de système de fichiers plus insidieux, mais on pourrait penser que cela affecterait plus d'un seul fichier.

J'ai eu le même problème, mais le problème venait des autorisations d'accès aux fichiers.J'ai donné chmod pour tous les RWX et maintenant tout va bien.

Alors peut-être que quelqu'un d'autre aura le même problème que moi, alors c'était une solution.

Salutations

Cela fonctionne parfois, donc il n'y a rien de fondamentalement mauvais du côté PHP (si le chemin était erroné, cela ne fonctionnerait jamais...mais c'est le cas, oui ?).Alors, qu’est-ce qui rend Loader.php périodiquement inaccessible ?Je soupçonnerais un problème d'autorisations.Quelque chose qui rend Loader.php ou le répertoire dans lequel il se trouve inaccessible.Peut-être qu'une tâche cron consiste à définir/réinitialiser les autorisations ?Vérifiez cela d’abord.Voyez quelles sont les autorisations quand cela fonctionne et ce qu'elles sont quand ce n'est pas le cas.

Dans mon cas, Zend/Loader.php n'était pas dans le répertoire PEAR.Il devrait être là, mais mon serveur Web était un peu brut.Mais vous pouvez également l'insérer dans le répertoire library/Zend.

Mais en effet, cela ne répond pas à la raison pour laquelle votre problème ne se produit que parfois.

J'ai également eu cette erreur lorsque je travaillais avec PHPUnit 3.5.5.Mon script d'application principal a correctement chargé le framework Zend, mais la classe de test a rencontré des erreurs.

Ma solution était d'ajouter ce qui suit à la classe de 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();
        }
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top