Pregunta

Heredé el sitio de un cliente que falla cada 3 o 4 días.Está construido utilizando zend-framework del que no tengo conocimiento.

El siguiente código:

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

Está provocando el siguiente error:

[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 

Ni siquiera sé por dónde empezar a intentar solucionar este problema.Mi nivel de conocimiento de PHP es intermedio pero como dije, no tengo experiencia con Zend.Además, ponerse en contacto con el desarrollador original no es una opción.

Lo interesante es que, aunque el código se ejecuta cada vez que se accede a una página del sitio, el error sólo ocurre de vez en cuando.

Creo que debe tener algo que ver con include_path pero no estoy seguro.

¿Fue útil?

Solución

Para empezar, creo que su ruta de inclusión debería tener una barra diagonal.Aquí hay un ejemplo mío:

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

Su archivo de arranque será incluido en otro archivo (probablemente un archivo index.php).Esto significa que si su ruta de inclusión es relativa (como la mía) en lugar de absoluta, entonces la ruta en la que se busca Loader.php cambia si el archivo que incluye bootstrap.php cambia.

Por ejemplo, tengo dos archivos index.php en mi aplicación Zend, uno para el front-end y otro para el área de administración.Cada uno de estos archivos de índice necesita su propio bootstrap.php con diferentes rutas relativas porque están incluidos en diferentes archivos de índice, lo que significa que tiene que ser relativo al archivo de índice solicitado original, no al archivo de arranque en el que están definidos.

Esto podría explicar por qué su problema es intermitente; podría haber otro archivo que incluya el programa de arranque en algún lugar y que solo se use ocasionalmente.Buscaría en todos los archivos de los sitios 'bootstrap.php' y vería todos los lugares que incluyen o requieren este archivo.

Otros consejos

El hecho de que solo ocurra esporádicamente me hace pensar que esto no es tanto un problema de programación, sino más bien un problema de administrador del sistema: si fuera un defecto en la implementación, se esperaría que fallara consistentemente considerando que el error es "No existe tal archivo". o directorio".Dos conjeturas

  • Hay varios servidores web front-end y uno de ellos está mal configurado (falta Zend Framework).

  • El directorio de inclusión PEAR está montado en la red y, en ocasiones, desaparece durante breves períodos de tiempo.

Podría ser un problema más insidioso del sistema de archivos, pero uno pensaría que esto afectaría a más de un solo archivo.

Tuve el mismo problema, pero el problema estaba en los permisos de los archivos.Le di chmod para todos los RWX y ahora todo está bien.

Entonces tal vez alguien más tenga el mismo problema que yo, entonces esta fue la solución.

Saludos

A veces funciona, por lo que no hay nada intrínsecamente incorrecto en el extremo de PHP (si la ruta fuera incorrecta, nunca funcionaría...pero lo hace, ¿no?).Entonces, ¿qué causa que Loader.php sea periódicamente inaccesible?Sospecharía que hay un problema de permisos.Algo que hace que Loader.php o el directorio en el que se encuentra sea inaccesible.¿Quizás un trabajo cron esté configurando/restableciendo permisos?Comprueba eso primero.Vea qué permisos hay cuando está funcionando y cuáles son cuando no.

En mi caso, Zend/Loader.php no estaba en el directorio PEAR.Debería estar ahí, pero mi servidor web estaba un poco dañado.Pero también puedes insertarlo en el directorio biblioteca/Zend.

Pero, de hecho, esto no responde por qué su problema ocurre sólo a veces.

También tuve este error cuando estaba trabajando con PHPUnit 3.5.5.El script de mi aplicación principal cargó bien el marco Zend, sin embargo, la clase de prueba tuvo errores.

Mi solución fue agregar lo siguiente a la clase de prueba.

   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();
        }
...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top