Zend Framework no PHP 7

1

Eu recentemente atualizei meu servidor para usar o PHP 7.0. No entanto, após essa atualização, notei que meu aplicativo da web não estava funcionando. Eu olhei no meu arquivo apache2 error.log e encontrei este erro:

Erro fatal do PHP: erro não detectado: classe 'Zend_Loader_Autoloader' não encontrada

Quando eu faço 'php -v' na linha de comando, isso mostra:

PHP 7.0.0-5 + deb.sury.org ~ confiável + 1 (cli) (NTS) Copyright (c) 1997-2015 O Grupo PHP Mecanismo Zend v3.0.0, Copyright (c) 1998-2015 Zend Technologies     com Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, da Zend Technologies

Parece que o framework está instalado, mas apenas para o cli (não para o Apache).

Alguém sabe como habilitá-lo para o Apache?

Obrigado.

    
por T Smith 16.12.2015 / 12:17

1 resposta

2

O que você está vendo de php -v não reflete o framework de aplicativos que você está usando (neste caso, o Zend Framework). O problema provavelmente está no código em nível de aplicativo que você está executando, que parece ser um aplicativo do Zend Framework 1.

Eu tive um erro muito semelhante em um aplicativo ZF1 que estava usando o Doctrine para sua camada ORM. No carregador de classes do Doctrine, eu tive que adicionar uma verificação extra para o PHP 7 para lidar com algumas maneiras pelas quais o PHP 7 altera a interpretação das variáveis. Ao redor da linha 224 de library/Doctrine/Common/ClassLoader.php , eu mudei:

} else if ($loader[0]::$loader[1]($className)) { // array('ClassName', 'methodName')
    return true;
}

para:

} else if {
    if (substr(PHP_VERSION_ID, 0, 1) == '7') {
        $method = $loader[0] . '::' . $loader[1];
        if ($method($className)) { // array('ClassName', 'methodName')
            return true;
        }
    }
    else {
        if ($loader[0]::$loader[1]($className)) {
            return true;
        }
    }
}

Não tenho certeza se isso resolverá seu problema especificamente. Se isso não funcionar, você poderia tentar exigir explicitamente o autoloader do Zend em seu script PHP (presumindo que library/Zend esteja em seu caminho de inclusão):

require_once 'Loader/Autoloader.php';

Espero que ajude!

    
por 04.01.2016 / 18:08