post:2012年9月30日 17:57 update:2015年5月5日 22:54

phpのCURLOPT_POSTFIELDSで@から始まるテキストを送信する方法

phpのcurlでファイルとメッセージをpostしたい場合 こんな感じで簡単にファイルupload.pngとメッセージほげほげをpost出来ますが、メッセージが@user ほげほげ の様に@から始まると、それをファイル名として認識し、開けないよ とエラーが出てしまいます。

解決策としてはCURLOPT_POSTFIELDSに配列ではなく文字列を直接指定する必要があるのですが、Content-Typeリクエストヘッダとバイナリデータとテキストデータを混ぜて送信する書式が決まっているので、それを作る関数を作りました。 @の変わりとなるprefixを指定する必要があるので、md5(microtime().rand());で作ってやります。 これで$post2にヘッダーとボディが入るので 指定して、送信。これで先頭が@で始まる文字も無事post出来ました。

しかしこれphpの仕様ミスだと思うんだけど、本来@から始まる文字とバイナリファイルを multipart/form-dataで送信する時はどうすべきなんだろう。自分で作れって事なのかな。自分で作ったけど。


参考にしました

Cocoaを使ってmultipartでテキスト、ファイル、他なんかいろいろ送信する – +8

これに使いました

PHP + Twitpic API v2 で、ファイルをアップロード

"phpのCURLOPT_POSTFIELDSで@から始まるテキストを送信する方法"に1件のコメントがあります

  1. 問題が解決しました。ありがとうございます。
    これってサーバ上に設置してある任意のファイルを送信できるという意味では
    結構大きなセキュリティホールになりますね。自サイトのDB接続などの設定ファイルを
    送信可能なことを確認できました。

コメントを残す

ブログオーナーにだけ送信したいメッセージはメール欄にどうぞ。名前とメール欄は任意。