CakePHP3:アップロードのプログレスバー

PHP5.4からは、ファイルアップロード時の進捗を知ることができるようになりました。 CakePHP3でハマったポイントがありましたのでここに列挙します:

セッション管理の方法

app.phpでは、セッション管理の方法を以下の様に指定できます:

    'Session' => [
        'defaults' => 'php',
    ],

ここでdefaultsの値にphpを指定している場合はOKですが、databaseの場合は進捗を取得できません。databaseを使いつつ、進捗を取得するにはおそらく、カスタムのセッションハンドラーを作る必要があります。

php.iniのsession.nameとCakePHPのsession.name

デフォルトでは、php.iniのsession.nameはPHPSESSID、CakePHPCAKEPHPです。 これをどちらかに寄せる必要があります:

CakePHP側をphp.iniに寄せる場合

app.phpを次のように変更します:

    'Session' => [
        'defaults' => 'php',
        'cookie' => 'PHPSESSID' 
    ],

php.iniをCakePHPに寄せる場合

php.iniの設定を次のように変更します:

session.name = CAKEPHP

上記のどれか1つでも抜けていると、$_SESSIONを覗いても進捗に関する変数が入ってない現象が発生します。