• ベストアンサー

フォームからアップロードした画像を、確認画面で確認後に登録するには?

宜しくお願いします。 PHP4+MySQLで簡単なWebシステムを構築しています。 1つのフォームから、数点の画像をアップロードして登録したいと思っています。 「登録内容はこちらでよろしいですか?」というような確認画面で、いったん確認画面に画像を表示させます。 ここでOKなら登録、というオペレーションです。 一見簡単なのかと思いきや、どうしても実現させる方法がわからずに困っています。 当初は、確認画面に移る段階で、PHPのテンポラリーファイルを、別の一時ディレクトリへ格納しようとしました。 ところが技が足りないのか、セッションが切れた場合などに、サーバーにファイルが残るようなコードになっちゃいます。 悩んだ末、サーバーに対して「フォルダに2時間以上あるファイルは自動で削除する」ような設定を施すしかないと思ったのですが、ライアントの都合上、できればサーバー設定をいじってほしくないと言われまして。。。 もしかしたら、すごく簡単なのかもしれないのですが、完全にハマってしまっています。 なにか方法がありましたら是非ご教示ください。 登録者は特定の人たちなので、OSやブラウザなどの使用環境は、あるていど統一できます。 ですからPHPだけでなくJavaScriptを絡めてでも、実現できたらと思っています。 どうか宜しくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#9414
noname#9414
回答No.2

基本的に、Webサーバ側ではテンポラリファイルを簡単には消すことができないと思っています。 JavaScriptのonUnloadイベントなどを使って、PHPのテンポラリファイル削除スクリプトなどを呼ぶことができれば、ユーザがブラウザを閉じたりしたときに消すことができると思いますが、完了画面に行く際などはその処理をさけなければなりません(JavaScriptはブラウザを閉じるのか、ページが切り替わるのかなんて気にしないはずだし・・・)し、面倒な処理が必要になってくるかと思います。 cronなどで数時間そのままのファイルを削除するスクリプトを呼ぶ設定した方が明らかに早い気がしますが、絶対にできないことなのでしょうか?きちんとお客様に説明できれば納得されると思いますよ。 ・ブラウザを閉じる際にはサーバに要求がこないので、テンポラリファイルが削除できない ・セッションが切れたりした場合は、誰だかわからなくなるので、どのファイルを削除すべきか判断しにくい など、いろいろお客様を納得させられる話し方はあるのではないでしょうか? それから・・・ the845tさまの書かれた方法では、他の人が同時にファイルをアップロードしようとしたときに問題が出てくるため、それを解決しなければならなくなるかと思いますが・・・ #サーバにすでにあるファイル名をさけてファイルを #開いて、という方法も同時に見に行った場合、 #検出は困難だと思います。 間違いがありましたらご指摘ください。 ではでは☆

fukuran
質問者

お礼

私もKanataさんの結論と同じところに達していたのですが、もしかして何か良い方法があるのでは!?と思い質問させて頂きました。 おかげさまで自信を持ってお客様に主張できました! (お客様の結論は、1週間に1回くらいFTPを使って、手動で消すとのことでした) どうもありがとうございました。

その他の回答 (1)

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

投稿の際は、tmp1、tmp2、tmp3などの名前にしておき、 実際に投稿する際に適当な名前を付けて保存。 その後tmp1~3を削除。 こうしておけば、セッションが切れても 次の投稿で同じ名前で保存されるから消えるのでは? (あんまり言い方法じゃないと思いますが。)

fukuran
質問者

お礼

認証があればこの方法も使えそうですね。 今回はちょっと採用できませんが、またの参考にさせて頂きます。 どうもありがとうございました。

関連するQ&A

  • 画像のアップロード

    現在画像のアップロードをし、同時に画像名と画像の説明文を登録するフォームを作っています。 ****************************************************** 画像名、説明文→AサーバーのDB(PHPファイルと同じサーバー) 画像ファイル→Bサーバーの画像格納フォルダ ****************************************************** 上記のように別々のサーバーに登録したいのですがどのように実現したらよいのでしょうか?

    • ベストアンサー
    • PHP
  • PHP 登録フォームの確認画面で画像を表示したい

    こんにちは。いつもお世話になっております。 PHPを勉強し始めたばかりのものです。 登録フォームから送った画像を、確認ページでプレビュー表示させたいです。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12141865207 の質問に辿り着きましたが、実装できませんでした。 3点質問があります。 1、sessionを使わず、$_FILESで実装することが可能なのでしょうか? 2、$_FILESから画像を表示させようとして失敗しています。一時保存場所に画像があると思うのですが、 $photo = $_FILES['UseImg']['tmp_name'] <img src ="<?php echo $photo; ?>"> これでは画像表示ができませんでした。$_FILESに関して根本的な考え違いをしているのだと思うのですが、これはどうしてなのでしょうか? 3、img要素にPHPを挿入することは可能なのでしょうか? 可能だとしたら、何故、以下の方法で動かないのでしょうか。 file.php <form enctype="multipart/form-data" action = "file2.php" method = "post" > <input type="file" name="UseImg"> <input type="submit" name="FILE送信" value="FILE送信"> </form> file2.php <?php session_start(); $_SESSION['UseImg']['type'] = exif_imagetype($_FILES['UseImg']['tmp_name']); $_SESSION['UseImg']['data'] = file_get_contents($_FILES['UseImg']['tmp_name']); echo '<img src="UseImg.php" />'; UseImg.php <?php session_start(); if (!isset($_SESSION['UseImg'])) { die('abort'); } switch ($_SESSION['UseImg']['type']) { case IMAGETYPE_JPEG: header('content-type: image/jpeg'); break case IMAGETYPE_PNG: header('content-type: image/png'); break case IMAGETYPE_GIF: header('content-type: image/gif'); break } echo $_SESSION['UseImg']['data'] 持っているPHPの本では確認画面を通さずに画像をアップロードしており、プレビューに関しては見当たりません。 いつも質問ばかりで申し訳ありませんが、この度も、宜しくお願いします。

    • ベストアンサー
    • PHP
  • フォームから画像登録の際の確認画面について

    フォームからテキストと画像を登録させようとしています。 登録する方法として自PCの画像があるパスから画像を特定して 登録しようとしていますが 確認画面で画像を表示するときに (1)自PCのパスから直接画像を表示する (2)一度、サーバにアップロードしてから表示する の2通りがあると思います。どちらで画像を表示させるのが主流なのでしょうか? ※たぶん、(1)はできないと思いますが・・・。 (2)の場合、画像をアップロードする際にファイル名がダブらないようにする 工夫も必要になるのかと思います。 よいアイディアありましたら教えてください。

    • 締切済み
    • PHP
  • アップロードした画像の削除

    フォームから画像をアップロードするものを作っています。 アップロードから画像の表示まではできているのですが 画像の削除の方法について教えてください。 単純に削除であればunlinkでいいのですが入力画面内にての 途中の工程でのいい方法がわからず困っております。。。 必須項目が5つありそのうちファイル選択が1つというのが前提です。 1・フォームからをファイルを選択 ※他の項目は空の状態 2・ファイルが選択されていれば必要なエラーチェックを行い 問題なければ一度でも送信ボタンを押したら他のフォームの値が 空でエラーがあってもファイルデータ保持のためバイナリデータ としセッションで保持した後サーバーにファイルをアップロード ※他のフォームが空なのでエラーとなり確認画面へページ移管は せず再度入力画面を表示 3・バイナリデータをもったセッションがあれば画像表示のため 別のphpファイルを読み込み入力画面中に確認用画像として表示 ※セッションを使用 4・画像表示と一緒に画像削除用のリンクを表示 ※<a href="hoge.php?action=del">削除<a> ※一度でも画像をアップロードすれば削除をクリックしセッション 削除しない限りファイルの選択は無効となる 5・削除をクリックしたら以下のソースでファイルに関しての 必要なセッション削除 if ($_GET['action'] == 'del') { // アップされたファイル削除 @unlink($_SESSION['file']['image_path']); // セッション削除 unset($_SESSION['file']); // 削除後移動 header('Location:' . $_SERVER['SCRIPT_NAME']); exit(); } これで問題なく画像は消えるのですが他のフォームに入力している 値までが削除(初期化?)されてしまいます。 ※header関数を使わなくてもアドレスがhoge.php?action=delと なるだけで結果は同じでした。 希望としては削除をクリックしたらファイルに必要なセッション のみを削除し他の入力されている項目の値残したいのですが どのような方法がありますでしょうか? 他の項目の値はセッションで保持している訳ではないのでheader 関数で移動すれば値も消えていて当然というのはわかるので実現 できる事なのかすらわからない状況です。 わかりづらい質問となってしまい申し訳ございませんが宜しく お願い致します。

    • 締切済み
    • PHP
  • 画像ファイルのアップロード

    PHPで、別サーバーに画像ファイルをアップロードしたいのですが方法が分かりません。 管理画面とユーザー画面が別々のサーバーになってます。 至急ご教授頂けますでしょか。お願い致します。

    • 締切済み
    • PHP
  • 入力フォームで取得した値を、次のページだけでなく、その次のページにも渡したい

    PHPとHTMLで「入力画面→確認画面→登録完了画面(DBに登録する)」というプログラムを作成しています。 「入力画面→確認画面」の場合、入力画面で入力された値をsession_id()で確認画面に渡して表示させているのですが、「確認画面→登録完了画面」の場合、どのようにして値を渡せばよいのかわかりません。 なお、PHPのソースは以下の通りです。 ◆◆◆入力画面(page1.php)◆◆◆ <?php session_start(); $_SESSION["name"] = $_POST["name"]; header("Location: http://xxxxxxxx.page1.php?id=". session_id()); ?> ◆◆◆確認画面(page2.php)◆◆◆ session_start(); $name = $_SESSION["name"]; $obj_file_class->file_open("page2.html"); while(!feof($obj_file_class->file)) { $string = fgets($obj_file_class->file); $buffer = str_replace("AAAA", $name, $string); echo $buffer; } $obj_file_class->file_close($obj_file_class->file); ↑このあと、$_SESSION["name"]を確認画面(page3.php)にどのようにして渡せばいいのかわかりません(登録画面では、確認画面から引き継いだ値をDBに格納しようと考えています)。 PHP勉強中のため、解決策がなかなか思いつきません... 見苦しいソースで申し訳ありませんが、ご回答頂けると幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ログイン状態の確認方法について

    PHP初心者です。 ログイン機能を備えているウェブサイトを制作していますが、ログイン状態の確認のセキュリティを高めるための方法で迷っています。 今作成したアプリでは、$_SESSION['username']の値を確認してログインであるかどうかを判断している設定ですが、ローカルPHPサーバーでテストを行っている際、この方法では、あるPHPアプリでログインしたら、サーバーの別のフォルダにあるアプリも「ログインしている」と判断してしまいます。 ログイン状態の確認方法のセキュリティを高めるには、何をチェックしないといけないのでしょうか? $_SESSION変数にウェブサイトの名前、ユーザー固有の無作為された文字列などを格納してチェックすることがふさわしいでしょうか? ご存知の方がいらっしゃいましたら、実装があまり負担がかからなくて、安全な方法を教えていただきたいのですが。

    • ベストアンサー
    • PHP
  • ファイルのアップロード

    現在下記のような処理を行なおうとしております。 a.php > 入力ページ アップロードするファイルを選択します。 b.php > 確認ページ アップロードするファイルのファイル名を表示します。 c.php > アップロードページ a.phpで選択したファイルをアップロードします。 move_uploaded_fileで実現しようと思っているのですが、b.php → c.phpの タイミングでa.phpで選択したファイルがテンポラリディレクトリから 削除されてしまうため、c.phpでアップロード処理が行なえません。 入力 → 確認 → アップロード といった順で処理を行なう場合、どのような方法を採るのが良いでしょうか。 ヒントでもよいので教えて頂ければと思います。

    • ベストアンサー
    • PHP
  • ファイルのアップロード処理を確認画面で確認後にアップロードするようにし

    ファイルのアップロード処理を確認画面で確認後にアップロードするようにしたいのですが、プログラムの書き方がわかりません。確認画面を通さずにやればアップロードできるのですが。どうすればいいのか教えてもらえるとうれしいです。 流れとしては「アップロード画面でファイルを指定」→「確認画面でアップロードボタンを押す」→「アップロード結果画面」です。作成中のソースは以下のようになっています。 ■upload.html(アップロード画面) <html><head><title>アップロード画面</title></head><body> <form action="kakunin.php" method="post" enctype="multipart/form-data"> ファイル:<br> <input type="file" name="upfile" size="30"><br> <input type="submit" value="確認画面へ"> </form></body></html> ■kakunin.php(確認画面)<未完成> <html><head><title>確認画面</title></head><body> <?php $upfile=$_POST['upfile']; print "選択したファイル: $upfile<br>\n"; ?> <br>この内容でよろしいですか?<br> よろしければ「アップロード」ボタンを押してください。<br> <form action="uploadkekka.php" method="post" enctype="multipart/form-data"> <input type="submit" value="アップロード"> </form></body></html> ■uploadkekka.php <html><head><title>アップロード結果</title></head><body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "uploadfiles/" . $_FILES["upfile"]["name"])) { chmod("uploadfiles/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできませんでした。"; } } else { echo "ファイルが選択されていません。"; } ?> </p></body></html>

    • ベストアンサー
    • PHP
  • ログイン中のフォーム確認画面でのsession管理について。

    例えば、ログインの認証機能をPHPのセッションを利用して作るとします。かつ、ログイン中にユーザのプロフィール変更画面等で、入力後、確認画面を出す際、formのhiddenでなく、これもセッションを利用するとします。 このように、一回のリクエスト/レスポンスに二つ以上のセッションが同時に走る場合、どのように管理するのが効率よいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう