- ベストアンサー
PHPからファイルをPOSTしたい
現在下記サイトを参考にある特定のURLにPOSTするよう作っていますが http://www.programming-magic.com/20080226023511/ これにファイル送信をいっしょにしたいのですが どのような方法がありますでしょうか? formでいうtype="file"のようなものをphp内で処理したいのですが
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
<?php //URLを参考に動かしてみました。 $uri = 'http://pathto/test.php'; $params = array("name" => "hoge"); $files = array("imagename.jpg" => "./imagepath.jpg"); echo sendPost($uri, $params, $files); function sendPost($uri, $params, $files = array()) { $data = ""; $boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10); foreach ($params as $key => $val) { $data .= "--$boundary\n"; $data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n"; } $data .= "--$boundary\n"; foreach ($files as $name => $file) { $fileHandle = fopen($file, "rb"); $fileContents = stream_get_contents($fileHandle); fclose($fileHandle); $data .= "Content-Disposition: form-data; name=\"{$name}\"; filename=\"{$name}\"\n"; $data .= "Content-Type: image/jpeg\n"; $data .= "Content-Transfer-Encoding: binary\n\n"; $data .= $fileContents."\n"; $data .= "--$boundary--\n"; } $params = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: multipart/form-data; boundary='.$boundary, 'content' => $data ) ); $ctx = stream_context_create($params); if (!($fp = fopen($uri, 'rb', false, $ctx))) { throw new Exception("Problem with {$uri}, $php_errormsg"); } return @stream_get_contents($fp); }