xml发布

时间:2009-06-15 10:19:52

标签: php xml

我想使用简单的PHP代码将xml文档发布到网址。

我有一个javascript代码,但javascript不支持跨域,所以我只想用php做。

任何人都有代码支持我......

3 个答案:

答案 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;