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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

14112閲覧

phpでファイルアップロードを作成してますが入力→確認→完了の画面遷移した場合にアップロードできません。

red13

総合スコア79

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/03/03 04:48

入力画面→確認画面→完了画面
という遷移のときにファイルアップロードが出来ません。

~~~入力~~~

<form enctype="multipart/form-data"~> <input type="file" name="upfile"> </form>

~~~確認~~~
$input = Input::all();
Session::put("upfile", $input['upfile']);
でセッションに登録

~~~完了~~~
File::copy();
で保存

上記のように
セッションに格納すれば複数画面経由でもアップロードできると考えたのですが
確認画面で
Serialization of 'Symfony\Component\HttpFoundation\File\UploadedFile' is not allowed
が発生してしまいます。

上記のような実装では不可能なのでしょうか。
また、この場合だと
「入力→確認」で一時フォルダに保存
「確認→完了」で一時フォルダから本フォルダに保存
というような実装にしなければならないのでしょうか。

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

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

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

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

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

guest

回答3

0

投稿2016/03/03 05:36

編集2016/03/03 05:37
JinwonKim

総合スコア312

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

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

red13

2016/03/03 05:51

移動または名前の変更が行われていない場合、リクエストの終了時に そのファイルはテンポラリディレクトリから削除されます。 と記載されているので、やはり遷移ごとの処理は必要だと思います。
JinwonKim

2016/03/03 05:56

move_uploaded_file()を使い一時ファイルをuploadなどのフォルダに配置し、削除されないようにしますよ。
red13

2016/03/03 07:00

move_uploaded_file(tmpファイル, 一時ファイル) のように配置すれば残りますね。 で move_uploaded_file(一時ファイル, 本ファイル) ですかね。
red13

2016/03/03 08:20

move_uploaded_fileの第1引数はtmpファイル以外使えませんね。 なので rename(一時ファイル, 本ファイル) ですね。
guest

0

アップロードした一時ファイルは、そのPHPの実行が終わった時点で削除されてしまいます。
なので、$_FILESを次画面に送ったとしても、ファイルがありません。

ogaaaanさんがおっしゃっているように、入力画面からの遷移時にどこかにファイルを保存しておき、次画面で使うようにする必要があると思いますよ。

この辺りもFAQですね・・・

投稿2016/03/03 05:26

shi_ue

総合スコア4437

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

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

red13

2016/03/03 05:34

POSTデータのようにできるのかと思いましたが、できないですね。 やはり遷移ごとの処理が必要ですね。
guest

0

ベストアンサー

入力画面 → 確認画面 → 完了画面 の3セットの場合ですが、
確認画面表示時にはすでにサーバに仮アップしてしまい、
完了後にしかるべき場所に移動、という方法でやったことがあります。

参考になれば幸いです。

投稿2016/03/03 05:07

ogaaaan

総合スコア765

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

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

ogaaaan

2016/03/03 05:08

ちなみに自分の場合、確認画面は使わないことが多いですね。 入力画面に対してsubmit直後にダイアログを出す程度です。
red13

2016/03/03 05:31

やはり遷移ごとに保存しないとできないようですね。 ファイルアップロードのみなら2画面で実装できたかもしれませんが ファイル以外に入力箇所があるため、残念ながら確認画面は使わなければなりません。
ogaaaan

2016/03/03 05:55

phpのファイルアップロードの仕様なので、1発目で送信しないと消えちゃうんですよねー。これは仕方がない。 ここから余談なのでスルーOK。 ファイル以外に入力箇所があっても、入力した内容(つまり入力画面)をそのまま見せるほうがユーザビリティが高い(自分が入力したままなので)という場合もあったりするので、送信時にダイアログで注意喚起する段階でとどめておくことは良くあります。 ただ、クライアントによってはそういうモダンな方法になじみがなく、必ず確認画面をつけろ、という場合もあります。当然、いったん入力されたデータをサーバ側で加工して再度表示するという処理が走りますが、マスターからデータを引っ張ったりとか、いろいろ手間がかかるので、最初は確認画面なしを提案しています。スマートフォンなどですと確認画面があるだけトラフィックが発生するので。 というわけで、サービスによりますよね。
red13

2016/03/03 07:05

仕方ないので一時ファイルを作成することにします。 確認画面は仕様によりけりですね。 今回はこういう仕様になってしまいました。
ogaaaan

2016/03/03 15:02

なるほど承知っす! そうなんですよね、仕様に合わせないといけないという。 頑張ってください!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問