質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

ActionScript

ActionScriptはRIA、モバイルアプリケーション、Webアプリケーションなど広く使われているスクリプト言語です。スクリプトとして、AdobeFlashやAdobeFlexで記述されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

10160閲覧

PHPでxmlデータをPOSTする方法

tarotarosu

総合スコア114

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

ActionScript

ActionScriptはRIA、モバイルアプリケーション、Webアプリケーションなど広く使われているスクリプト言語です。スクリプトとして、AdobeFlashやAdobeFlexで記述されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/09/05 10:06

編集2016/09/06 06:51

###前提・実現したいこと
丸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;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

実際に動かしていませんが、cURLを使うとこんな感じになるのではないかと

php

1<?php 2$url = "http://localhost/Scripts/Data.aspx"; 3$xml = '<hoge>foo</hoge>'; 4 5$curl = curl_init(); 6curl_setopt($curl, CURLOPT_URL, $url); 7curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 8curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); 9curl_setopt($curl, CURLOPT_POSTFIELDS, $xml) 10$result = curl_exec($curl); 11curl_close($curl); 12echo $result; 13?>

投稿2016/09/05 12:51

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

「追記2」のようにしたところ解決できました。
ご回答ありがとうございました_(..)

投稿2016/09/06 06:52

tarotarosu

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問