Zend/Loader.php konnte nicht geladen werden.Versuchen Sie herauszufinden, warum?

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

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe eine Client-Site geerbt, die alle 3 oder 4 Tage abstürzt.Es wurde mit dem Zend-Framework erstellt, mit dem ich keine Kenntnisse habe.

Der folgende Code:

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

Verursacht den folgenden Fehler:

[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 

Ich weiß nicht einmal, wo ich anfangen soll, das Problem zu beheben.Meine PHP-Kenntnisse sind mittelmäßig, aber wie gesagt, ich habe keine Erfahrung mit Zend.Außerdem ist die Kontaktaufnahme mit dem ursprünglichen Entwickler keine Option.

Das Interessante ist, dass der Fehler nur hin und wieder auftritt, obwohl der Code jedes Mal ausgeführt wird, wenn eine Seite der Website aufgerufen wird.

Ich glaube, es muss etwas mit include_path zu tun haben, bin mir aber nicht sicher.

War es hilfreich?

Lösung

Zunächst einmal denke ich, dass Ihr Include-Pfad vielleicht einen abschließenden Schrägstrich haben sollte.Hier ist ein Beispiel von mir:

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

Ihre Bootstrap-Datei wird in eine andere Datei eingebunden (wahrscheinlich eine index.php-Datei).Das heißt, wenn Ihr Include-Pfad relativ (wie meiner) und nicht absolut ist, dann ändert sich der Pfad, in dem Loader.php gesucht wird, wenn sich die Datei einschließlich bootstrap.php ändert.

Ich habe beispielsweise zwei index.php-Dateien in meiner Zend-App, eine für das Frontend und eine für den Admin-Bereich.Diese Indexdateien benötigen jeweils eine eigene Bootstrap.php mit unterschiedlichen relativen Pfaden, da sie von unterschiedlichen Indexdateien eingebunden werden, d. h. sie müssen relativ zur ursprünglich angeforderten Indexdatei sein, nicht zur Bootstrap-Datei, in der sie definiert sind.

Dies könnte erklären, warum Ihr Problem nur gelegentlich auftritt. Möglicherweise befindet sich irgendwo eine andere Datei mit dem Bootstrap, die nur gelegentlich verwendet wird.Ich würde alle Site-Dateien nach „bootstrap.php“ durchsuchen und alle Orte sehen, die diese Datei enthalten/erfordern.

Andere Tipps

Die Tatsache, dass es nur sporadisch vorkommt, lässt mich vermuten, dass es sich hierbei weniger um ein Programmierproblem als vielmehr um ein Systemadministratorproblem handelt. Wäre es ein Fehler in der Implementierung, würde man damit rechnen, dass es ständig fehlschlägt, wenn man bedenkt, dass der Fehler „Keine solche Datei“ lautet oder Verzeichnis".Zwei Vermutungen

  • Es gibt mehrere Front-End-Webserver und einer davon ist falsch konfiguriert (das Zend Framework fehlt).

  • Das PEAR-Include-Verzeichnis wird im Netzwerk bereitgestellt und verschwindet gelegentlich für kurze Zeit.

Es könnte sich um ein heimtückischeres Dateisystemproblem handeln, aber man könnte meinen, dass dies mehr als nur eine Datei betrifft.

Ich hatte das gleiche Problem, aber das Problem lag bei den Berechtigungen für Dateien.Ich habe chmod für alle RWX eingegeben und jetzt ist alles in Ordnung.

Vielleicht hat jemand anderes das gleiche Problem wie ich, dann war dies die Lösung.

Grüße

Es funktioniert manchmal, sodass auf der PHP-Seite nichts grundsätzlich falsch ist (wenn der Pfad falsch wäre, würde es nie funktionieren ...aber das tut es, ja?).Was führt also dazu, dass auf Loader.php regelmäßig nicht zugegriffen werden kann?Ich würde ein Berechtigungsproblem vermuten.Etwas, das dazu führt, dass auf Loader.php oder das Verzeichnis, in dem es sich befindet, nicht mehr zugegriffen werden kann.Vielleicht setzt ein Cron-Job Berechtigungen ein/zurück?Überprüfen Sie das zuerst.Sehen Sie, welche Berechtigungen es gibt, wenn es funktioniert, und welche, wenn es nicht funktioniert.

In meinem Fall befand sich Zend/Loader.php nicht im PEAR-Verzeichnis.Es sollte da sein, aber mein Webserver war etwas unzulänglich.Sie können es aber auch in das Verzeichnis „library/Zend“ einfügen.

Dies ist jedoch keine Antwort darauf, warum Ihr Problem nur manchmal auftritt.

Ich hatte diesen Fehler auch, als ich mit PHPUnit 3.5.5 arbeitete.Mein Hauptanwendungsskript hat das Zend-Framework einwandfrei geladen, in der Testklasse sind jedoch Fehler aufgetreten.

Meine Lösung bestand darin, der Testklasse Folgendes hinzuzufügen

   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();
        }
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top