aki_m86のブログ

備忘録として書いていきます。参考になれば幸いです。

【FuelPHP】 File Class

/public/assets内にあるファイルにアクセスする方法

1. 呼び出し方

以下の関数を実行すると(ブラウザからアクセスできる)ファイルのURLが返ってきます。

File::get_url(DOCROOT."assets/<dir>/<file.extension>")

DOCROOT内にあるファイル(ここでは/assets/<dir>/<file.extension>)を取得してそのファイルのURLを返します。DOCROOTは定数で、<プロジェクトルート>/publicを指しています。

例えば以下のように記述すると、assets内にある音楽ファイルをブラウザから再生することができます。

<audio controls>
    <source src="<?php echo File::get_url(DOCROOT."assets/audios/music.mp3") ?>" type="audio/mpeg">
</audio>

2. 設定ファイル

core/config/file.phpにある設定ファイルをapp/config/file.phpにコピーし、以下のように書き換えます(以下のスニペットをそのまま保存してもよい)。

<?php
return array(
    'base_config' => array(
        'basedir' => null,
        'extensions' => null,
        
        /*ここを書き換える*/
        'url' => \Config::get('base_url')."/",

        'use_locks' => null,
        'file_handlers' => array(),
    ),
    'areas' => array(),
    'magic_file' => null,
    'chmod' => array(
        'files' => 0666,
        'folders' => 0777,
    ),
);

エラー

正しく設定できていないと次のようなエラーが出てきます。

Invalid path

File::get_url()で指定したパスが正しくありません。ファイルの保存先、または関数内で指定したファイル名を確認してください。

Fuel\Core\FileAccessException [ Error ]:
Invalid path for file or directory.

LogicException

LogicException [ Error ]:
File operation now allowed: cannot create a file url without an area url.

上述の2. 設定ファイルが正しいかどうか、見直してください。

参考

Fileについて
File Intro - Classes - FuelPHP Documentation

DOCROOTなどの定数について
https://fuelphp.com/docs/general/constants.html:titile