Pergunta

Herdei um site cliente que trava a cada 3 ou 4 dias.Ele é construído usando o framework zend com o qual não tenho conhecimento.

O seguinte 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á causando o seguinte erro:

[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 

Eu nem sei por onde começar a tentar consertar isso.Meu nível de conhecimento em PHP é intermediário mas como falei não tenho experiência com Zend.Além disso, entrar em contato com o desenvolvedor original não é uma opção.

O interessante é que mesmo que o código seja executado toda vez que uma página do site é acessada, o erro só acontece de vez em quando.

Acredito que deve ter algo a ver com include_path, mas não tenho certeza.

Foi útil?

Solução

para começar, acho que seu caminho de inclusão talvez deva ter uma barra final.Aqui está um exemplo meu:

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

Seu arquivo de inicialização será incluído por outro arquivo (provavelmente um arquivo index.php).Isso significa que se o seu caminho de inclusão for relativo (como o meu) em vez de absoluto, então o caminho no qual Loader.php é procurado muda se o arquivo incluindo bootstrap.php for alterado.

Por exemplo, tenho dois arquivos index.php em meu aplicativo Zend, um para o front-end e outro para a área administrativa.Cada um desses arquivos de índice precisa de seu próprio bootstrap.php com diferentes caminhos relativos porque são incluídos por diferentes arquivos de índice, o que significa que eles deve ser relativo ao arquivo de índice original solicitado, não ao arquivo de inicialização no qual eles estão definidos.

Isso pode explicar por que seu problema é intermitente; pode haver outro arquivo incluindo o bootstrap em algum lugar que é usado apenas ocasionalmente.Eu pesquisaria em todos os arquivos do site por 'bootstrap.php' e veria todos os lugares que incluem/exigem esse arquivo.

Outras dicas

O fato de isso acontecer apenas esporadicamente me faz pensar que isso é menos um problema de programação e mais um problema de administrador de sistema - se fosse um defeito na implementação, você esperaria que falhasse consistentemente, considerando que o erro é "Esse arquivo não existe ou diretório".Dois palpites

  • Existem vários servidores web front-end e um deles está configurado incorretamente (sem o Zend Framework).

  • O diretório de inclusão PEAR é montado na rede e ocasionalmente desaparece por curtos períodos de tempo.

Poderia ser um problema mais insidioso no sistema de arquivos, mas alguém poderia pensar que isso afetaria mais do que apenas um arquivo.

Eu tive o mesmo problema, mas o problema estava nas permissões dos arquivos.Dei chmod para todos os RWX e agora está tudo bem.

Então, talvez alguém tenha o mesmo problema que eu, então esta foi a solução.

Cumprimentos

Às vezes funciona, então não há nada inerentemente errado no final do PHP (se o caminho estivesse errado, nunca funcionaria ...mas acontece, sim?).Então, o que está fazendo com que Loader.php fique periodicamente inacessível?Eu suspeitaria de um problema de permissões.Algo que está tornando o Loader.php ou o diretório em que ele está inacessível.Talvez um cron job esteja configurando/redefinindo permissões?Verifique isso primeiro.Veja quais são as permissões quando está funcionando e quais são quando não está.

No meu caso, Zend/Loader.php não estava no diretório PEAR.Deveria estar lá, mas meu servidor web estava um pouco cru.Mas você também pode inseri-lo no diretório biblioteca/Zend.

Mas, na verdade, isso não responde por que seu problema ocorre apenas às vezes.

Também tive esse erro quando estava trabalhando com o PHPUnit 3.5.5.Meu script de aplicativo principal carregou bem o framework zend, mas a classe de teste apresentou erros.

Minha solução foi adicionar o seguinte à classe de teste

   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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top