エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP 2.3でファイルのアップロード処理を作る

      2017/04/29

CakePHPでファイルアップロードを作る

 

ファイルアップロードの参考サイト

 
CakePHP 2.3でプログラム開発を行っていますが、ファイルのアップロード処理についてググっていたら、下記のサイトに行き当りました。
ほほー。ファイルアップロードにも Pluginがあるのか、と思ったものの、このページではプラグインに頼らない、と書いてありましたので、私も頼らずに実際に作ってみることにしました。(記事が書かれたのが 2011年2月ですので、その後のバージョンアップなどでどうなったかは分かりませんが。)
http://lambdagroove.blogspot.jp/2011/02/cakephp.html
 
簡単なファイルのアップロードであれば下記のページに従って作っていけば、簡単に出来上がります。
http://www.almondlab.jp/labs/1043
 
上記の方法では、実運用に際してファイルの削除処理などが必要になってくると思います。
 
また、ファイルの管理を煩雑にしないために、画像などのファイル情報を DBに保存したい、という場合もあるかと思います。
その場合は、下記のページが参考になりました。
http://c-brains.jp/blog/wsg/10/06/05-074544.php
 
ですが、このページの通りに作っていくと、「Viewファイルの記述がおかしい」というエラーになってしまいましたので、その前に作った簡易フォームのスクリプトを借りることにしました。
(CakePHP 2.0では echoのエイリアスである e()が使えなくなっていますので、そのほかの不具合もバージョンの違いによるものと思われます。)
 
 

CakePHPでファイルアップロードのサンプルコード

 
また、ファイルが jpeg固定でしたので、それを可変にし、ついでに元ファイルのファイル名、ファイルサイズといった情報も取得するために、テーブルを拡張したり、そのままではうまく画像が呼び出せなかったために、画像の確認するためのファイルなどを作りましたので、あわせてそちらも紹介いたします。
 
————–(テーブル)

————–
 
————–(/View/Images/index.ctp)

————–
 
/View/Images/contents.ctp は、ないとエラーになりますので作成する必要がありますが、中身は空のファイルになります。
————–(/View/Images/contents.ctp)
————–
 
 
/Controller/ImagesController.php は、以下のようになります。
それぞれの処理の解説は、参考にしたバシャログさんのサイトを見ていただく方が分かりいいかと思います。
 
————–(/Controller/ImagesController.php)

————–
 
 

MIMEタイプの追加について

 
また、今回追加した MIMEタイプなどの情報は、下記サイトを参考にして作成しました。
http://vitafacio.sakura.ne.jp/wordpress/?p=35
 
 


 

ファイルアップロードの表示側の処理

 
また、http://localhost/cake/images/contents/xxxxxxxx.jpg のような形式では文字化けしたような文字が表示され、なぜかうまく表示されずさんざん悩んだのですが、それを改善させる方法を見つけることはできませんでした。
PDFや、csvファイルは問題なく表示されますが、jpeg、gifなどの画像ファイルが正しく表示されないという不具合でしたので、おそらく「header(‘Content-type:…….」の出力部分がうまく処理されていないのだろうと思うのですが...
 
 
ただ、実際の使用方法に近い記述の方法で確認したところ、正しく表示されましたので、それで良しとしたところもあります。
 
————–(/webroot/test.php)

————–
 
上記のファイルを作成し、webrootにおいてアクセスすると画像ファイルも無事に表示されましたので、画像も正しくアップロードされていることが確認できました。
 
 

ファイル名を乱数にしてセキュリティを向上させる方法

 
ファイル名を乱数や、指定の値に変更し、セキュリティを向上させる方法も書いていますので、こちらも参考にしてください。
CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。

CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能

CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQLの実行はConnectionManagerを使う

CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。

CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説

CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。

CakePHP 2.x系 Viewでのコメントの記述方法など

CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。

CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法

CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。

CakePHP3のバージョンを指定してインストールする詳細な手順を解説
CakePHP3のバージョンを指定してインストールする詳細な手順を解説

CakePHP3のバージョンを指定してインストールする方法を詳細解説。CakePHP3のインストールはComposerを使うため設定もほぼ自動で完了。データベースの接続情報を記載すればアプリ開発のベースが整う。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装

CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。