PHPでファイルのアップロード方法について

このQ&Aのポイント
  • PHPでファイルのアップロード方法について教えてください。
  • 1画面でファイルを選択し、ボタンを押した後にファイル名を確認してから2画面でアップロードしたいです。
  • 具体的な記述方法を教えてください。
回答を見る
  • ベストアンサー

ファイルのアップロードに関して

PHPでファイルのアップロードをしようと考えていますが、単純に1画面でファイルの選択し、 その画面上のボタンを押した際にアップロードするという事は可能ですが、ボタンを押した後、 次画面(プレビュー)でファイル名を確認し、2画面目のボタンを押した時にアップロードしたい と考えております。 どのように記述したら良いか教えて下さい。 《現状 このままでは正しく動作します》 1画面目 <FORM method="post" name="frm" id="frmid" enctype="multipart/form-data"> <TABLE> <TR><TD width="200">【登録画面】</TD></TR> <?php print("<TR>\n"); print("<TD width='200'>ファイルを選択:</TD>\n"); print("<TD><input type='file' name='upfile'></TD>\n"); print("</TR>\n"); ?> </TABLE> </FORM> 2画面目 <?php $updir = "//192.168.999.999/doc/"; $filename = $_FILES['upfile']['name']; if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){ print("Upload failed"); print($_FILES['upfile']['error']); }else { print("<b> $filename </b> uploaded"); } ?> 実際は2画面目ではファイル名だけを表示させ、2画面目のボタンを押した際に 取り込み処理を行いたい。 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数6

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

1画面目にsubmitがないのですが、どうやって2画面目に遷移するのですか? >2画面目ではファイル名だけを表示させ、 この時点で、POSTされたファイルを保存していないといけません(スクリプトを抜けたらuploaded_fileは削除されるので)。テンポラリな名前で保存する(一定期間経過したらまとめて削除する)とか、セッション変数に格納するとかの工夫が必要です。 #そもそも「ファイル名を表示」に何か意味があるんですかね。 #画像のときにサムネイルを表示とかならわかりますが(汗 あと、最終的にファイルデータを保存する(テンポラリファイルからmoveするとかセッション変数のデータを書き出すとか)ときに、ブラウザから送信した「ファイル名」を使ってはいけません。アテにしちゃいけないです。

asamix_000
質問者

お礼

agunuz様、ご回答ありがとうございます。 なんとか実現できました!

関連するQ&A

  • phpでのファイルアップロード

    ファイルのアップロードについてご質問があります。 宜しくお願いします。 基礎phpという本でファイルをアップロードするサンプルがあり、このスクリプトでアップロードされたファイルを格納する『upload』というディレクトリをサーバに作成し、スクリプトを実行して、実際にファイルがアップロードできているかffftpにて『upload』ディレクトリの中を見てみると、なにも表示されませんでした。しかしブラウザから http://myドメイン/upload/ファイル名 にアクセスすると表示されます。 ですのでアップロードはできているがファイルが見えないという状態になっております。また『upload』ディレクトリの削除などもできなくなってしまいます。 サーバの設定が関係しているのかとも思ったのですが、サーバの設定を変更することはできないので、プログラムがわで何とかできないでしょうか? 大変申し訳ありませんが宜しくお願いいたします。 以下がそのコードです。 【up.html】 <html> <head><title>File Uploader</title></head> <body> <form method="post" enctype="multipart/form-data" action="up.php"> <input type="file" name="upfile"> <input type="submit" value="upload"> </form> </body> </html> 【up.php】 <html> <head><title>File Uploader</title></head> <body> <p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • javaからphpへのファイルアップロードで困っています

    クライアントからサーバへファイルをアップロードするJAVAプログラムを作成しているのですが、アップロードの処理が分からず困ってます。 処理の流れとしては、 HTML(クライアント)でファイルを指定し、 PHP(サーバ)でクライアントから指定されたファイルの受信処理を行う。 このHTML(クライアント)の部分をJAVAで作成しようと考えています。 HttpURLConnectionで接続までは作成できましたが、JAVAでHTMLの <input type="file" name="upfile"> の部分をどのようにコーディングするのか分かりません。 //PHP受信処理↓ $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed"); print($_FILES['upfile']['error']); print("<b>失敗</b>"); } else { print("<b> $filename </b> uploaded"); print("<b>成功</b>"); どなたかご存知の方がいらっしゃいましたら御教授お願いします。

  • PHP 画像アップロード 重複防止

    画像、ファイルをアップロードできるフォームを作成しています。 ---------------------- フォーム <FORM NAME="objform" action="yes.php" METHOD="POST" ENCTYPE="multipart/form-data"> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="1000000"> <INPUT TYPE="file" NAME="img1" SIZE="40"><BR> <INPUT TYPE="submit" NAME="submit" VALUE="アップロードする!!"> </FORM> ーーーーーーーーーーーーーーーーーーーー yes.phpの中身 $updir = "./photo/"; $filename = $_FILES['upfile']['name']; //form の「upfile」の値 move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename); -------------------------- これでphoto のフォルダに格納されるようにしているのですが、 もし、同じファイル名でアップされた場合上書きされてしまいます。 IDをつけるか、もしくはその他の方法でファイル名が重複されないような設定にするにはどうすればよいでしょうか。 現在PHP勉強中です。 初歩的なことかもしれませんが、 よくわからないのでアドバイスを頂けると助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルアップロードを教えて下さい。

    お世話になります。 php初心者です。 初歩的な質問になると思いますが… ローカルでファイルのアップロードのスクリプトの練習をしてるのですが上手く行きません。 アップロードしたファイル名が全て同じになります。 ディレクトリ構成として htdocs  ├128.php  └phpbook(ディレクトリ)    └128-2.php ■128.phpの中身 <form action="./phpbook/128-2.php" enctype="MULTIPART/FORM-DATA" method="POST"> ファイル:<input type="FILE" name="upfile"> <input type="submit" value="アップロード"> </form> ■128-2.phpの中身 <?php if(move_uploaded_file($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/") ==FALSE){ print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> アップロードは出来てるのですが、phpbookディレクト内にphpbookという拡張子が何もついてないファイルがアップロードされてしまいます。 よろしくお願いします。

    • ベストアンサー
    • 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
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

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

    ファイルを updir のフォルダにアップロードしたいのですが 上手くいきません。 「ファイルアップロード失敗」 が表示されます。 ファイル名はそのままでアップしたいと思っています。 <tr> <td align="right">PDF:</td> <td> <input type=file name="update_p_pdf" size="50"> </td> </tr> ↑上のはちゃんと動いていると思います。 ↓下のがどうしても「ファイルアップロード失敗」になります。 ファイルの名前を変更しようとは思っていません。 とりあえず updir のフォルダにファイルを入れたいです。 //PDF入力 <? $uploadfile = "./updir/".$addres.".pdf"; print "<pre>"; if(move_uploaded_file($_FILES['update_p_pdf']['tmp_name'], $uploadfile)) { ?> <font color="blue">ファイルアップロード成功</font> <?php } else { ?> <font color="red">ファイルアップロード失敗</font> <?php } ?> //PDF 元のデータです。 http://proxy.f2.ymdb.yahoofs.jp/bc/269445e1/bc/5c56/admin.php?bcPbuTGBxi28K6X1

    • 締切済み
    • PHP
  • ファイルアップロードについて【ギブアップです】

    さくらレンタルサーバーを使っています。 クライアントからサーバーへファイルをアップロードする仕組みを作りましたが、ファイルアップロード失敗になります。 どこがいけないのでしょうか? どうしてもわからず質問させて頂きました。 (さくらレンタルサーバーでは不可能??) <HTMLファイル> <html> <head>テスト</head> <body> <form action="./aaa.php" enctype="MULTIPART/FORM-DATA" method="POST"> ファイル:<input type="FILE" name="upfile"> <input type="submit" value="アップロード"> </form> </body> </html> <PHPファイル(aaa.php)> <?php if (move_uploaded_file($_FILES['upfile']['tmp_name'], "/home/test_serv/www/test/files/")){ print "ファイルアップロード成功"; print_r($_FILES); } else { print "ファイルアップロード失敗"."<br>"; print_r($_FILES); } ?> 出力結果は、「ファイルアップロード失敗」になります><;

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

    私は以下のスクリプトを実行しましたがエラーが出ました。誰か教えてください。 --------------------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>ファイルアップローダー2</title> </head> <body> <form method="post" enctype="multipart/form-data" action="09_03_fileup.php"> <input type="file" name="data" size="30"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php $updir = "./updir/";            //ファイルを保存するフォルダ $filename = $_FILES['data']['name']; if(file_exists($_FILES['data']['tmp_name'])){         //ファイルの存在を確認 tempの状態で確認  $filesize = filesize($_FILES['data']['tmp_name']);     //ファイルサイズを取得 tempの状態で取得  if($filesize <= 100000){   if(ereg("(^[a-zA-Z0-9_-]+)\.(jpg)|(^[a-zA-Z0-9_-]+)\.(gif)",$filename)){ //jpgかgifしかアップできない    move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename); //ファイルをuploadフォルダに保存     echo "ファイル名 " . $filename . " アップロード成功!";     echo $_FILES['data']['error'];     echo "<br><br>";     echo "<img src='./$updir/$filename'>";   } else {     echo "jpg かgif のファイルしかアップできません。或いはハイフン以外の記号があります。";   }  } else {     echo "$filesize Byte ファイルサイズが大きすぎます。<br>100000 Byte 以下にしてください。";  } } else {    echo "ファイルをアップした順にテーブルに並べていきます。20枚でお終い。<br>"; } //ここから保存されたファイルの表示部分の記述です。 if ($handle = opendir($updir)) {    //フォルダを開きます。  echo "<table border='1'>";  $cnt = 1;     //カウント用の数字です。   while (false !== ($file = readdir($handle))) {      //ファイルがあればすべて順に読みこむ    if ($file != "." and $file != "..") {     //.と..を読まないようにします。      if($cnt % 5 == 0){    //カウントが5で割って0なら右端なので</tr>を付ける       echo "<td><img src='$updir/$file' width='112'></td></tr>";      } else if($cnt % 5 == 1){   //5で割って1なら左端なので<tr>を付ける       echo "<tr><td><img src='$updir/$file' width='112'></td>";      } else {       echo "<td><img src='$updir/$file' width='112'></td>";      }    $cnt++;    }    if($cnt > 20){   //カウントが20を超えたら終了      break;    }   }  closedir($handle);      //フォルダを閉じます }    //ここからテーブルがぴったり右端で終わらなかった時の処理 if(!(($cnt-1) % 5 == 0)){  //右端ぴったりで終わらなかったら  $cvr = 5-($cnt-1) % 5;   for($a=1;$a<=$cvr;$a++){  //足りない分だけ補う    echo "<td width='112'> </td>";   } echo "</tr>"; } echo "</table>"; ?> <!--これでPHPは終わりです。--> </body> </html> --------------------------------------------------------------- エラーが以下の通りです --------------------------------------------------------------- Parse error: parse error, unexpected T_VARIABLE in /home/wwwbest/public_html/09_03_fileup.php on line 20 --------------------------------------------------------------

  • jQuery複数ファイルアップロード

    お世話になります。 jQuery Multiple File Upload Pluginを使って複数のファイルをアップロードしたいですがサーバー側でどのように受けたら良いか分からず困っています。 次のコードですと、アップロードするファイルが1個なら問題ないのですが、複数あるとに2番目以降のファイルの指定方法が分かりません。 http://javascript.webcreativepark.net/library/jquery_multiple_file_upload_pluginではname="upfile"が書かれておらずfile1[]、file2[]と読めると書いてあったのですができませんでした。 【html側】 <input type="file" name="upfile" class="multi" maxlength="5"/> 【サーバー側】※PHP print_r ( "アップロードファイル名 : " . $_FILES["upfile"]["name"] . "<BR>"); print_r ( "MIMEタイプ : " . $_FILES["upfile"]["type"] . "<BR>"); print_r ( "ファイルサイズ : " . $_FILES["upfile"]["size"] . "<BR>"); print_r ( "テンポラリファイル名 : " , $_FILES["upfile"]["tmp_name"] . "<BR>"); print_r ( "エラーコード : " . $_FILES["upfile"]["error"] . "<BR>");

    • ベストアンサー
    • PHP

専門家に質問してみよう