我想使用简单的PHP代码将xml文档发布到网址。
我有一个javascript代码,但javascript不支持跨域,所以我只想用php做。
任何人都有代码支持我......
答案 0 :(得分:1)
看看SimpleXML:http://us2.php.net/simplexml
答案 1 :(得分:1)
使用PECL HTTP classes来处理PHP中的HTTP消息是非常简单的。
在您的实例中,您想发出HTTP request(这是客户端 - >服务器消息)。值得庆幸的是HttpRequest::setPostFiles简化了在HTTP请求中包含文件内容的过程。有关详细信息,请参阅PHP手册页(上一个链接)。
不幸的是,HTTP类的手册页在细节上有点稀疏,并且不完全清楚HttpRequest::setPostFiles
的参数应该是什么,但是下面的代码应该让你开始:
$request = new HttpRequest(HttpMessage::HTTP_METH_POST);
$request->setPostFiles(array($file));
$response = $request->send(); // $response should be an HttpMessage object
HttpRequest::setPostFiles
的手册指出此方法的单个参数是要发布的文件数组。这不清楚,可能意味着一组本地文件名,一组文件句柄或一组文件内容。不用花很长时间才能找出哪个是正确的!
答案 2 :(得分:0)
这是一个使用流而不依赖于PECL的示例。
// Simulate server side
if (isset($_GET['req'])) {
echo htmlspecialchars($_POST['data']);
exit();
}
/**
* Found at: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl
*/
function do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array('method' => 'POST',
'content' => $data));
if ($optional_headers !== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}
// Example taken from: http://en.wikipedia.org/wiki/XML
// (Of course, this should be filled with content from an external file using
// file_get_contents() or something)
$xml_data = <<<EOF
<?xml version="1.0" encoding='ISO-8859-1'?>
<painting>
<img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/>
<caption>This is Raphael's "Foligno" Madonna, painted
in <date>1511</date>-<date>1512</date>.</caption>
</painting>
EOF;
// Request is sent to self (same file) to keep all data
// for the example in one file
$ret = do_post_request(
'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?req',
'data=' . urlencode($xml_data));
echo $ret;