しっかり理解する CakePHP Upload プラグインの使い方 (4) うまく動かない時にはこれをチェック!

この記事を読むのに必要な時間は約 12 分です。


CakePHP Upload プラグインで、これまでにご紹介したように、DB・Model・Controller・View を用意したのに、なぜかアップロードで怒られる!という時にチェックする方法をご紹介します。

Upload プラグインの動作の解説等は以下をご覧下さい。
→ CakePHP Upload プラグインの動作解説 : 画像のアップロードからサムネイル作成まで手軽にできる CakePHP Uploadプラグイン

導入方法や DB 変更、Model の変更・作成については以下をご覧下さい。
→ CakePHP Upload プラグインの使い方 (1) 導入・DB, Model 変更

View や Controller の修正については、以下をご覧下さい。
→ CakePHP Upload プラグインの使い方 (2) View や Controller の修正

Behavior の設定方法と内容については、以下をご覧下さい。
→ CakePHP Upload プラグインの使い方 (3) Behavior の設定


cake-logo

スポンサーリンク
スポンサーリンク

前提

CakePHP のバージョンが合っているかは事前に確認しましょう。

2015/06 現在、最新の Upload プラグインは、CakePHP 2.x 用です。

CakePHP 3.x では動作しないと思います。

Validation をかけていると、エラーメッセージが分かりづらくなりますので、うまく動かない場合は、一旦外した方が切り分けやすくなるかと思います。

チェック1. プラグインを正しく読み込めているか

NG な場合の症状

プラグインを読み込めていないのに、Model の Behavior に登録している場合、該当の Model を読み込む際に、以下のようなエラーメッセージが表示されます。

こうなれば OK

対象の Model を利用している Controller で、エラーなく何らかの action が動作すれば OK です。

ただし、Model の Behavior に登録できていない場合、その Model は読み込まれない場合には、エラーは表示されません。

考えられる原因

  • プラグインが正しく配置できていない
  • プラグインを load し忘れている

対応方法

Step 1. プラグインが正しく配置できているかを確認しましょう。

以下のようなディレクトリ構成になっているか確認しましょう。

Upload 直下に 1つ解凍用のディレクトリが出来ていたりしないか確認しましょう。

Step 2. プラグインの load を忘れていないか確認しましょう。

通常であれば、以下のように、app/Config/bootstrap.php で load します。

チェック2. Model の Behavior に Upload プラグインを登録できているか

NG な場合の症状

レコード登録時 (ファイルアップロード時) に、以下のようなエラーメッセージが表示されます。

こうなれば OK

ファイルアップロード無しでレコード登録した際、Controller で、 $this->data->request  を以下のように受け取れていれば OK です。

bake した場合など、登録成功で redirect が走ると、pr() していたものも redirect 先で表示されません。

場当たり的対処ですが、Controller の return $this->redirect(...);  をコメントアウトして、 return true;  に変えて、その前で pr($this->request->data);  で確認しています …

多分もっとちゃんとしたやり方はあるかと思います。

考えられる原因

  • Behavior の指定のしかた誤り
  • カラムの指定誤り

対応方法

Step1. Model クラスの Behavior の記述の仕方を確認しましょう。

Behavior は、Model クラスの $actsAs に登録します。例は以下の通りです。

特に、 $act<strong>s</strong>As を $actAs  と間違えたりしないように気をつけましょう…。私だけかも知れませんが。

Step 2. カラム名の指定を確認しましょう。

上記 Behavior 指定例の、”カラム名” の部分が、DB のカラム名とずれていないか確認しましょう。

キャメルケースや単数形などの変換は無しで、DB カラム名のままです。

チェック3. アップロード用 View の記述が正しいか

NG な場合の症状

指定していたカラムに、ただファイル名が登録されます。ディレクトリ名のカラム等がブランクになります。

Controller で $this->request->data  を見ると以下のようになっています。

こうなれば OK

Controller で $this->request->data  を見た際に、以下のように受け取れていれば OK です。

考えられる原因

  • Form タグに対する “type” => “file” 指定のし忘れ

対応方法

Step 1. アップロード用 Form の View を確認しましょう。

Form->create  に対して “type” => “file” を指定しているか確認しましょう。

View の例としては、以下の通りです。

アップロード用 Form の HTML ソースを確認します。以下のようになっていたら、指定し忘れです。

以下のように enctype="multipart/form-data"  が含まれていれば OK です。

チェック4. アップロード先のディレクトリが用意できているか

NG な場合の症状

以下のようなエラーメッセージが出たりします。

こうなれば OK

正常に登録が完了して、ファイルが配置されれば OK です。そりゃそうだ、って話ですが。

考えられる原因

  • 用意したディレクトリのパス間違い
  • パーミッション不足

対応方法

Step 1. アップロードベースディレクトリがどこになっているかを確認しましょう。

アップロードベースディレクトリがどこになっているかは、エラーメッセージに表示されていれば、すぐに分かります。

もし表示されていない場合は、以下の方法で表示することができます。

Controller で 以下のように pr() します。

配列になっていて、配下の "path" や、 "thumbnailPath"  に、それぞれのフルパスがセットされています。

注意点としては、パスに含まれるモデル名やカラム名は、小文字になるといったところです。

Step 2. アップロードベースディレクトリに至るパスまでのパーミッションを確認しましょう。

パーミッションがあれば、Upload プラグインは自動的にアップロードベースディレクトリの作成も行ってくれます。

必要に応じて chmod コマンドや FTP を利用して、パーミッション変更をしましょう。

必要なパーミッションは運用次第です。web アクセスで書き込みできるような設定にしましょう。どうしても分からない場合は、低セキュリティになりますが、 777 (rwxrwxrwx) に設定してしまえばいけるでしょう。

また、パスの途中全てで、ディレクトリに入るための実行権限である 1 (x) は最低必要です。

ひとこと

個人的にはまったのは、アップロードベースディレクトリでした。

オーナー と www ユーザーとが別のため、パーミッションの指定をちゃんとできていませんでした。

パーミッションさえあれば、自動的に作成してくれるとは知らず、はまってしまいました。

当記事がお役に立てば幸いです。

[動作確認環境]

  • PHP : 5.6.9
  • CakePHP : 2.6.4
  • MySQL : 5.6.24
  • Upload Plugin : 2.0


今回は以上です。


スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です