1 2 3 4 5 6 |
$post["file"]="ほげほげ"; $post["file"]="@./upload.png"; $curl = curl_init("http://example.com/"); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS,$post); $result = curl_exec($curl); |
解決策としてはCURLOPT_POSTFIELDSに配列ではなく文字列を直接指定する必要があるのですが、Content-Typeリクエストヘッダとバイナリデータとテキストデータを混ぜて送信する書式が決まっているので、それを作る関数を作りました。 @の変わりとなるprefixを指定する必要があるので、md5(microtime().rand());で作ってやります。
1 2 3 4 |
$prefix=md5(microtime().rand()); $post["file"]="ほげほげ"; $post["file"]=$prefix."./upload.png"; $post2=post2($post,$prefix); |
1 2 3 4 5 |
$curl = curl_init("http://example.com/"); curl_setopt($curl, CURLOPT_HTTPHEADER,array($post2["header"])); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS,$post2["post"]); $result = curl_exec($curl); |
しかしこれphpの仕様ミスだと思うんだけど、本来@から始まる文字とバイナリファイルを multipart/form-dataで送信する時はどうすべきなんだろう。自分で作れって事なのかな。自分で作ったけど。
参考にしました
Cocoaを使ってmultipartでテキスト、ファイル、他なんかいろいろ送信する – +8
これに使いました
PHP + Twitpic API v2 で、ファイルをアップロード
問題が解決しました。ありがとうございます。
これってサーバ上に設置してある任意のファイルを送信できるという意味では
結構大きなセキュリティホールになりますね。自サイトのDB接続などの設定ファイルを
送信可能なことを確認できました。