7

Silexを使用したプロジェクトに取り組んでいます。use特定のファイルに、オートローダーに特定のphpファイルを含めるようにステートメントを追加しました。ファイルの後半で、そのクラスを使用します。開発サーバーではすべて問題ありませんが、本番環境に移行するとFatal error: Class not foundメッセージが表示されます。編集:両方のサーバーがPHP5.4.4を使用するようになりました。

これを引き起こしている可能性のあるインストール固有の問題はありますか?composerによって生成された両方の名前空間自動ロードファイルが同じであることを確認できます。

完全を期すために、ここにincludeステートメントがあります。

use Instaphp;

コードの後半でのクラスの使用法は次のとおりです。

$app['instaphp'] = $app->share(function() use ($app) {
            if($app['tagframe.instagram_token'] === null) {
                return Instaphp\Instaphp::Instance();
            } else {
                return Instaphp\Instaphp::Instance($app['tagframe.instagram_token']);
            }
        });

        $app['instaphp.config'] = $app->share(function() use ($app) {
            return Instaphp\Config::Instance();
        });

正確なエラーは次のとおりです。

Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89

更新:私が取り組んでいるかなり大きなコードベースの他の場所ではそのようなエラーは発生していないことを追加する必要があります。したがって、すべての名前空間が機能しないほど単純ではないことを知っています。

4

2 に答える 2

8

デフォルトでは、Mac は Journaled Case-Insensitive ファイルシステムを使用します。Linux は、好みにもよりますが、ほとんどの場合、大文字と小文字が区別されます。これにより、上記の動作が確実に発生します。

Mac に 2 つ目のパーティションを作成し、Journaled Case-Sensitive としてフォーマットして、本番環境に近づけることをお勧めします。

于 2012-10-22T18:17:20.693 に答える
6

コメントありがとうございます。オートローダーがダンプされるように、Composer を使用して更新したことを確認しました。

問題は (何時間もいじって分かったように) 私が使っていたサードパーティのライブラリ (Instaphp) のディレクトリ構造が小文字だったことです。これは私の Mac には問題を与えませんでしたが、運用サーバーは Ubuntu を実行しています。これは、Mac では大文字と小文字を区別しないファイル処理ユーティリティを使用していると思われます。

私はこれに一晩を費やしたことで完全に自分自身を蹴っています!

于 2012-09-20T12:17:17.880 に答える