[FuelPHP]Windowsだと問題ないのにLinux上だとClass not foundエラーが出るときにチェックすること

Windowだとクラスのロードが問題なく行えるのに、Linux上だとクラスのロードでエラーになる場合は、ファイル名の大文字・小文字のルールが間違っている可能性が高い(主に開発環境はWindowsで本番環境がLinuxだと気づきにくい)。

例えば、Model/ItemMst.phpという名前でモデルを作っている場合、Windowsだとファイル名の大文字小文字を無視するのでphpファイルの読み込みが行えるが、LinuxだとModel/itemmst.phpを読みに行こうとしてエラーになってしまう。

newで指定されだクラス名に対して、実際に何のファイル名でクラスローダがロードを試みているか確認したい場合は、Autoloader::load()の最後当たりにある下記の処理にデバッグログを差し込んでみるとわかりやすい。

[fuel\core\classes\autoloader.php]


class Autoloader
{
    public static function load($class)
    {
        ...

        if ( ! $loaded)
        {
            $path = APPPATH.'classes'.DS.static::class_to_path($class);
error_log("load class[{$class}] -> path={$path}\n" , 3, "/path/to/log.txt");
            if (is_file($path))
            {
                static::init_class($class, $path);
                $loaded = true;
            }
        }


FuelPHPでのログ出力はLogクラスを利用して、Log::info(“message”);などで出力できるが、上記の処理はクラスローダ処理なので、Logクラスを使えないことに注意が必要。もし、事情期のログ出力でLogクラスを使用すると、Logクラスの生成でさらにload()メソッドが呼ばれ…、となり想定しないふるまいになってしまう。

関連記事

コメントを残す

メールアドレスが公開されることはありません。