###前提・実現したいこと
丸2日調べてもわからなかったため質問させていただきます_(..)
PHPによってxmlを特定のurlに送信したいと考えています。
下記のActionScriptで記述されたコードの内容のようなことをPHPで実装したいのですが、どのように実装したらよいのでしょうか?
調べていると、file_get_contentsやcURLを応用すれば良いのかなと考えているのですが、調べていてもよく理解できませんでした…
何か手掛かりのようなものだけでも頂けると非常に助かります。よろしくお願いします_(..)
###該当のソースコード
actionscript
1public function data_send(remote:Boolean = true, rfc1867:Boolean = true) :void 2 { 3 try { 4 var xmlstr:String = toXML(true).toXMLString(); 5 6 const callurl:String = remote ? dataurl : "http://localhost/Scripts/Data.aspx"; 7 8 trace("callurl=", callurl); 9 var sendobj:URLRequest = new URLRequest(); 10 sendobj.method = URLRequestMethod.POST; 11 sendobj.url = callurl; 12 if (rfc1867) 13 { 14 const bdry:String = "----------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6"; 15 const rbdy:String = "--" + bdry; 16 const filename:String = _data_no + ".xml"; 17 const content_type:String = "application/octet-stream"; 18 const fileNameString:String = "sendData"; // "FileData" 19 const BOM:String = "\ufeff"; 20 const crlf:String = "\r\n"; 21 22 sendobj.contentType = "multipart/form-data; boundary=" + bdry; 23 var urq:URLRequestHeader; 24 urq = new URLRequestHeader("Cache-Control", "no-cache"); 25 sendobj.requestHeaders.push(urq); 26 urq = new URLRequestHeader("Accept", "text/*"); 27 sendobj.requestHeaders.push(urq); 28 urq = null; 29 sendobj.data = rbdy + crlf 30 + "Content-Disposition: form-data; name=\"Filename\"" + crlf 31 + crlf + filename + crlf 32 + rbdy + crlf 33 + "Content-Disposition: form-data; name=\"" + fileNameString + "\"; filename=\"" + filename + "\"" + crlf 34 + "Content-Type: " + content_type + crlf 35 + crlf + BOM + xmlstr + crlf 36 + rbdy + crlf 37 + "Content-Disposition: form-data; name=\"Upload\"" + crlf 38 + crlf + "Submit Query" + crlf 39 + rbdy + "--"; 40 } 41 else 42 { 43 // sendobj.contentType = "application/octet-stream"; 44 sendobj.contentType = "xml/text"; 45 sendobj.data = xmlstr; 46 } 47 48 // navigateToURL(sendobj); 49 var loader:URLLoader = new URLLoader(); 50 addListeners(loader); 51 loader.load(sendobj); 52 sendobj = null; 53 return; 54 } catch (error:Error) { 55 removeListeners(loader); 56 _message = error.message; 57 dispatchEvent(new Event(SEND_FAULT)); 58 loader = null; 59 throw error; 60 } 61 }
###追記
おそらく、このような情報が付与できれば良いとは思うのですが、どのようにしてよいのか…
----------------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6
Content-Disposition: form-data; name="sendData"; filename="sendData.xml"
Content-Type: text/xml
###追記2
下記のように記述したところ無事解決しました。
ご回答ありがとうございました_(..)
php
1$url = "送り先"; 2 3$boundary = "---------------------".substr(md5(rand(0,32000)), 0, 10); 4$boundaryMod = "--" .$boundary; 5$xmlData = file_get_contents("data.xml"); 6$postdata = ""; 7 8$postdata .= "$boundaryMod\n"; 9$postdata .= 'Content-Disposition: form-data; name="sendData"; filename="data.xml"' ."\n"; 10$postdata .= 'Content-Type: text/xml' ."\n\n"; 11$postdata .= $xmlData . "\n"; 12$postdata .= "\n" .$boundaryMod. "--" ."\n"; 13 14$ch = curl_init($url); 15curl_setopt($ch, CURLOPT_POST, true); 16curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 17curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; boundary=' .$boundary. ' ', 'Cache-Control: no-store,no-cache', 'Accept: text/*', 'Paragma: no-cache')); 18curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 19$result = curl_exec($ch); 20curl_close($ch); 21 22echo $result;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。