web-dev-qa-db-ja.com

PHP 7のZendFramework

最近、サーバーをPHP 7.0を使用するようにアップグレードしました。しかし、このアップグレード後、Webアプリケーションが機能していないことに気付きました。Apache2error.logファイルを調べたところ、このエラーが見つかりました。 :

PHPの致命的なエラー:キャッチされないエラー:クラス 'Zend_Loader_Autoloader'が見つかりません

コマンドラインで「php-v」を実行すると、次のように表示されます。

PHP 7.0.0-5 + deb.sury.org〜trusty + 1(cli)(NTS)Copyright(c)1997-2015 PHP Group Zend Engine v3.0.0、Copyright(c )1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev、Copyright(c)1999-2015、by Zend Technologies

フレームワークがインストールされているように見えますが、CLIのみ(Apacheではありません)です。

Apacheで有効にする方法を知っている人はいますか?

ありがとう。

1
T Smith

php -vから表示されているものは、使用しているアプリケーションフレームワーク(この場合はZend Framework)を反映していません。問題は、実行しているアプリケーションレベルのコードにある可能性が高く、Zend Framework1アプリのようです。

ORMレイヤーにDoctrine)を使用していたZF1アプリで非常によく似たエラーが発生しました。Doctrineのクラスローダーで、PHP = 7 PHP 7が変数の解釈を変更するいくつかの方法を処理します。library/Doctrine/Common/ClassLoader.phpの224行目あたりで次のように変更しました。

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

に:

} 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;
        }
    }
}

これで問題が具体的に解決されるかどうかはわかりません。これが機能しない場合は、PHPスクリプトでZendオートローダーを明示的に要求してみてください(library/Zendがインクルードパスにあると想定):

require_once 'Loader/Autoloader.php';

お役に立てば幸いです。

2
GuySMiLEZ