tags:

views:

80

answers:

3
+1  Q: 

xml posting

i want to post an xml document to a url, using simple php code.

i have a javascript code but the javascript will not support cross domain, so i just want to do it with php.

does any one have a code for this to support me...

+1  A: 

Take a look at SimpleXML: http://us2.php.net/simplexml

Ivarska
A: 

Handling HTTP messaging in PHP is quite straightforward using the PECL HTTP classes.

In your instance you want to issue an HTTP request (that's a client->server message). Thankfully the HttpRequest::setPostFiles simplifies the process of including file content in an HTTP request. Refer to the PHP manual page (previous link) for specifics.

Unfortunately the manual pages for the HTTP classes are a bit sparse on details and it's not fully clear what the arguments for HttpRequest::setPostFiles should be, but the following code should get you started:

$request = new HttpRequest(HttpMessage::HTTP_METH_POST);
$request->setPostFiles(array($file));

$response = $request->send();  // $response should be an HttpMessage object

The manual for HttpRequest::setPostFiles states that the single argument of this method is an array of files to post. This is unclear and may mean an array of local file names, an array of file handles or an array of file contents. It shouldn't take long to figure out which is correct!

Jon Cram
A: 

Here's an example that uses streams and does not rely on 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;
Marc Ermshaus