質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

8776閲覧

CakePHPでアップロードした画像を指定したフォルダに移動&データベースにファイル名を保存したい

ssk

総合スコア332

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

2クリップ

投稿2016/11/21 11:07

#環境
・CakePHP3
・MySQL
・開発環境(Mac)

#知りたい事
・アップロードした画像を指定したフォルダに移動
・画像のファイル名をデータベースに追加

#プログラムの内容

PHP

1#add.ctp 2echo $this->Form->file('hogeimg');

PHP

1#HogesController.php 2$fileName = $this->request->data['hogeimg']["tmp_name"]; 3move_uploaded_file($fileName['tmp_name'],'../webroot/hogeimg/'.$fileName['name']);

#エラー文
Illegal string offset 'tmp_name' [APP/Controller/HogesController.php, line 59
Illegal string offset 'name' [APP/Controller/HogesController.php, line 59
#補足
アップロードした画像は送れているようです。
debug($this->request->data);とすると、画像情報は以下で受け取れているようです。

PHP

1'hogeimg' => [ 2 'name' => 'snoohnoghoeu.png', 3 'type' => 'image/png', 4 'tmp_name' => '/private/var/tmp/phpeTjpiQ', 5 'error' => (int) 0, 6 'size' => (int) 166127 7 ]

どうしたら、../webroot/hogeimg/のフォルダの中に画像を移動できますか?
パーミッションは変更済みです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

配列の取り出しがおかしい気がしますけど...以下のようにすればいいのではないかと

php

1$file = $this->request->data['hogeimg']; 2move_uploaded_file($file['tmp_name'],'../webroot/hogeimg/'.$file['name']);

投稿2016/11/21 13:22

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2016/11/21 13:45

仰る通り、配列の取り出し方がおかしかったです。 データベースへの登録は、以前に教えていただいた通り行うことで実装することができました。 #HogesController.php public function add()の箇所、patchEntityの前で $this->request->data['hogeimg'] = $fileName['name']; と画像名を代入。 ご解答ありがとうございますm(_ _)m
guest

0

form に multipart/form-data を設定していないように思います。

投稿2016/11/21 11:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2016/11/21 11:17

formのHMTLには ```HTML <form method="post" enctype="multipart/form-data" accept-charset="utf-8" action="/test/sample/hoges/add"> ``` と、表示されているので multipart/form-dataは指定できているかと思います。
退会済みユーザー

退会済みユーザー

2016/11/21 11:46 編集

input type="file" に nameの指定がされていない可能性もありますね。
ssk

2016/11/21 12:28

HTMLで以下のように、name="hogeimg"と出力されていました。 <input type="file" name="hogeimg" required="required">
退会済みユーザー

退会済みユーザー

2016/11/21 12:53 編集

var_dump($this->request->data); で確認すればいいのでは? これ以上は提示された情報からは推測できません。
ssk

2016/11/21 13:32

配列の取り出し方に問題があることがわかりました。 お陰様で指定したフォルダに画像を移すことができましたm(_ _)m ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問