• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルをアップロードするとファイルの中に・・・)

ファイルをアップロードする際に予期せぬ情報も一緒に書き込まれる問題とは?

MarrowGの回答

  • ベストアンサー
  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

バウンダリとは区切り文字です。 MIMEタイプの1つであるマルチパート形式であるデータの場合に必ずついてきます。 具体的には、 Content-Type: multipart/form-data; bondary=---------------------------10265533117308 がマルチパートメッセージの開始を示すものです。 複数のメッセージ(=データ)は「boundary=」以降の文字列で区切られていることを示しています。 また区切り文字列(この場合は---------------------------10265533117308 )の次の行には次データある場合は必ずMIMEタイプやデータタイプの宣言が付きます。 content-disposition: form-data; name="submitter" ←これです。 このような構造になっているので、メッセージ全体をスキャンして必要な部分のみを切り出せば良いことになります。 参考URLはRFC文書の日本語訳リンク集です。 詳細はMIME関連のRFCをご覧ください。

参考URL:
http://www.se.hiroshima-u.ac.jp/~isaki/rfc/list.html
noname#4663
質問者

お礼

ありがとうございます。おかげさまで不要なデータを取り除くことができました。URLのほうも勉強になりました。また、アドバイスお願いしますね。

関連するQ&A

  • PHPからファイルアップロードの実現

    ブラウザからファイルをアップロードするように、PHP内で同じことを実現させたいと考えています。 fsockopenを使用してGETやPOSTをすることは実現できていますが、ファイルのアップロードとなると少々勝手が違い、うまいことできません。 現状では下記のようなものを送信させているのですが、受け取り側のPHPで認識できません。 POST /upload.php HTTP/1.0 host: 127.0.0.1 Content-Type: multipart/form-data; boundary=---test Connection: close Content-Length: 120 ---test Content-Disposition: form-data; name="test"; filename="test.txt" Content-Type: text/plain testtest ---test 現状、テスト用に upload.php というので受け取っているのですが、$_FILES 変数は空の状態です。 基本的なところを理解していないので、根本的に間違っていたり、足りないところがあるような気がするのですが…。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • サーバーでのデコード方法(例えばbase64)

    質問内容 サーバーでのPHPスクリプトではアップロードされたファイルのデコードを行うにはContent-Transfer-Encoding: base64をみて 適切にデコード処理をするのだと考えますがContent-Transfer-Encoding: base64を取得する方法はどのようにすればいいか わからなくて困っています。 $_FILES,getallheaders(),file_get_contents('php://input')等を試しましたが必要な情報は得られませんでした。 知りたい内容は 1.ポストされたアップロードファイルのデコードはどのような判定方法になるか。 2.私は先にも記述しましたがContent-Transfer-Encoding: base64行を判定の基準とするものとと考えています、でもその内容の取得方法がわかりません。 3.および、これらの関連として生のデータ取得についても教えていただければ幸いです。($_POSTや$_FILESに加工される前の情報) 環境: SERVER_SOFTWARE : Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.8 下記はHTTPプロトコルでサーバーに送られたデータストリームです。 (info1とinfo2は質問内容には直接関係はありません) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ POST /test/xxxx.php HTTP/1.0 Host: 192.168.xxx.uuu User-Agent: wxWidgets 2.x Content-Length: nnn Content-type: multipart/form-data; boundary=_--Boundary_separator --_--Boundary_separator Content-Disposition: form-data; name="info1" AAAAAAAAAAAAAAA --_--Boundary_separator Content-Disposition: form-data; name="info2" BBBBBBBBBBBBBBB --_--Boundary_separator Content-Disposition: form-data; name="file"; filename="anyfile.jpg" Content-Type: multipart/form-data Content-Transfer-Encoding: base64 base64でencodeされたデータ内容の羅列 --_--Boundary_separator-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 以上 よろしくお願いします。

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

    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
  • 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
  • 画像ファイルの受信

    ブラウザのフォームから送られたファイルデータを読み取り、保存するプログラムを作成しています。 socket() bind() listen() accept() を用いてブラウザから届いたマルチパートデータ(以下のような) ヘッダ ~ -----------------------------boundary Content-Disposition: form-data; name="~"; filename="~" Content-Type: text/plain ファイル内容 -----------------------------boundary をrecvして、そこからファイル内容を取り出すという方法を考えていたのですが、画像ファイルを受信するとrecvが途中で止まってしまいます。textファイルでの動作は確認しました。 他の方法でも結構ですので、ブラウザから画像ファイルを受信できる方法を伝授いただけるとありがたいです。

  • cakephpでPOST(ajax)データを取得

    Cakephpからajaxでポストされたファイルデータをデータベースに保管したいのですが ポストの中身が取得できなくて困っています。自分なりに調査したのですが 結局パケットをキャプチャしてみても解決しないままです。 以下の二つにさほど違いはないように思えるのですが何が原因でしょうか? 必要な情報があれば補足いたします。 Cakephpの$this->request->dataからポストデータが正常に取得できるリクエスト POST /images/add HTTP/1.1 Host: yahoo.yahoo.yahoo User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c Connection: keep-alive Content-Type: multipart/form-data; boundary=---------------------------199552540520686 Content-Length: 964 -----------------------------199552540520686 Content-Disposition: form-data; name="_method" POST -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][name]"; filename="" Content-Type: application/octet-stream -----------------------------199552540520686 Content-Disposition: form-data; name="image" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][contents]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][moto_filename]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][filetype]" -----------------------------199552540520686 Content-Disposition: form-data; name="data[Image][filesize]" -----------------------------199552540520686 Content-Disposition: form-data; name="btnSave" ...... -----------------------------199552540520686-- Cakephpの$this ->request->dataでポストデータが取得できないリクエスト prの出力は空配列→array()(ajax+FormDataオブジェクトにて生成されたリクエスト) POST /Images/add HTTP/1.1 Host: yahoo.yahoo.yahoo User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Accept: */* Accept-Language: ja,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: false X-Requested-With: XMLHttpRequest Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData Content-Length: 572 Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c Connection: keep-alive Pragma: no-cache Cache-Control: no-cache -----------------------------243202103330754 Content-Disposition: form-data; name="filename" a.txt -----------------------------243202103330754 Content-Disposition: form-data; name="contents" aaa -----------------------------243202103330754 Content-Disposition: form-data; name="moto_filename" b.txt -----------------------------243202103330754 Content-Disposition: form-data; name="filetype" image/jpg -----------------------------243202103330754 Content-Disposition: form-data; name="filesize" 10 -----------------------------243202103330754-- 何がいけないのでしょうか・・。 よろしくお願いいたします。ご回答お待ちしております。

    • 締切済み
    • PHP
  • 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
  • なぜこうなるのかおしえてください。

    boundary0 = multipart/form-data; boundary=---------------------------7d1723a5d04e6 boundary1 = 7d1723a5d04e6 本当ならば上記のようになるのですが、 下記のように連呼してでてきてしまうのはどうしてでしょうか?教えて下さい。 DIR = datafile PASS = sample TITLE = nowhere ACT = 登録1 CMT = 5435 SaveFile::boundary0 = multipart/form-data; boundary=---------------------------7d114e361370146,multipart/form-data; boundary=---------------------------7d114e361370146 SaveFile::boundary1 = 7d114e361370146,multipart/form SaveFile::boundary2 = 7d114e361370146,multipart/form print " $ENV{'CONTENT_TYPE'}<br>

  • ReadParseを使ってのバイナリファイルのアップロード

    ファイルをアップロードするCGIを作ろうと思い、以下のように書いてみました。そうしたところテキストファイルのアップロードには成功しましたが、バイナリファイルだとアップロード出来ても開けなかったり、画像が崩れてしまったりしてしまいました。 何故バイナリファイルだとアップロードが失敗してしまうのかわかりません。どこを直せば良いのでしょうか。 よろしくお願いします。 ----------------------------------------------- フォーム <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="xxx.pl"> <INPUT TYPE="file" NAME="file"> <INPUT TYPE="submit" VALUE="アップロード"> </FORM> ------------------------------------------------ xxx.pl &ReadParse(*in, *f_name, *f_type); $f_name{'file'}=~/([^\\\/]+)$/; $filename = $1; open(IN, ">$filename"); print IN $in{'file'}; close(IN);

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

    お世話になります。 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