アプリ版:「スタンプのみでお礼する」機能のリリースについて

FORMを使わずにPHP(ソケット通信)でPOSTを利用して、クライアントPCの
ファイルをサーバーにアップロードしたいのですが、うまくいきません。
..レスポンスは、「HTTP/1.1 200 OK」で戻って来るのですが、
$_FILESの中が空の状態です。

一応、POSTでメッセージボディのデータも送れるレベルにはなったのですが
ファイル転送ではうまくいきません。

他の(過去)投稿などの情報もいろいろ調べたり、書籍なども参考にしましたが
いまひとつ良くわかりません。
(サーバーの設定によっても変わるのでしょうか)

根本的な間違いなどもあるかも知れませんが、以下のような送信文で
試しています。
ご存知の方がいらっしゃいましたら是非ご教授お願いします。

---(↓以下送信文 sock_send.php)------------------------
POST /test/sock_recv.php HTTP/1.0
host: www.hogehoge.com
Content-Type: multipart/form-data; boundary=transfer
//Accept-Encoding: gzip
//Accept-Language: ja
//Accept-Charset: Shift_JIS,EUC-JP,UTF-8
Accept: text/*, */*
Content-Length: 126
Connection: close

--transfer
Content-Disposition: form-data; name="sendfile"; filename="C:\temp\...\test.txt"
Content-Type: text/plain
--transfer
---(↑以上送信文)------------------------

注)//はコメント部、空白行は改行しています。
コメントも含めてヘッダーは幾つかの組み合わせで試しています。

尚、環境はレンタルサーバーで以下の内容です。
Server: Apache/2.0.46 (Red Hat)
X-Powered-By: PHP/4.4.2
 テストファイルの容量は100バイト以下の小さいものです。

A 回答 (3件)

Content-Typeのところにmultipart/form-data


書いてあるようですが、Content-TypeはGET リクエストがなされた場合に送ら
れるエンティティボディのメディアタイプを示すものなのでPOSTの時
は無視されるのでは。
Content-Disposition; form-dataを
Content-Disposition; multipart/form-dataにするとうまくいくのでは
ないかとおもいます。

この回答への補足

アドバイスありがとうございます。
しかし残念ながら、教えて頂いた事を盛り込んで見ましたがだめでした。

実は、なかなか把握できない状態が続いており困っていましたが
初心に立ち返り、実際の通信データをキャプチャーして、それを
シミュレーションした方が一番いいのではないかと思っています。

ただ、それはそれで少し時間かかりそうですので、皆様のアドバイスなど
参考にしながら、チャレンジしてみたいと思います。

うまくまとまりそうでしたら、また追ってご報告できればと思います。
ありがとうございました。

補足日時:2006/09/21 17:06
    • good
    • 0

(↑以上送信文)で終わりなら肝心のファイルの内容を送信してない様に見えますが

この回答への補足

ご回答ありがとうございます。

> (↑以上送信文)で終わりなら肝心のファイルの内容を送信してない様に見えますが

実は不明な所としてその部分もあります。
一応、テキストファイルを送る事を想定して数十バイトを入れ込んでテストも
していますが、$_FILESは読めず状態は変わりませんでした。

---(↓上記抜粋略)------------------------
Content-Length: 198
Connection: close

--transfer
Content-Disposition: form-data; name="sendfile"; filename="C:\temp\...\test.txt"
Content-Type: text/plain

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
--transfer
---(↑以上送信文)------------------------

ここが良くわからないのですが、送信データに関しては自分でここに
記述しないといけないのでしょうか?

そして、これが画像とかでしたらバイナリーデータでの記述となるのでしょうか。
 ff2021224a4b etc のような表現?? それとも別の表現??
その場合、画像のサイズ(場合によって数メガ以上)なども含めて、何か微妙な不明点もあります。
それと、自分で送信データを記述するのでしたら "C:\temp\...\test.txt" のような
記述よりも >> "test.txt" の方が良いのでしょうか?
(実際やってみても関係ないようでしたが)

もう少し詳しく教えて頂ければ助かります。
よろしくお願いいたします。

補足日時:2006/09/19 08:56
    • good
    • 0

確か、PHPのグローバル関数『$_FILES』はPOSTでアップロードしないとダメじゃなかったでしたっけ??


他の方法だと、この関数は使えないって書いてあった気がします。。。

参考URL:http://php.s3.to/man/features.file-upload.html

この回答への補足

早速のご回答ありがとうございます。

通常の場合、FORMのMETHOD="POST"で指定しますが
ソケット通信を利用した場合も POSTでの送信となり、同様の扱いに
なるかと思いますが、違うのでしょうか?
(表面的には違うようでも、同じHTTPプロトコルかと思っていますが)

もし、違うようでしたら $_FILESに変わる方法をお教え願いませんか。
よろしくお願いいたします。

補足日時:2006/09/18 21:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!