phpbar.de logo

Mailinglisten-Archive

[php] [PHP] XML-RPC $HTTP_RAW_POST_DATA PHP 5.2.0

[php] [PHP] XML-RPC $HTTP_RAW_POST_DATA PHP 5.2.0

Zeiger, Stefanie S.Zeiger at trio-group.de
Mit Dez 19 14:36:41 CET 2007


Guten Tag!

Ich sitze jetzt schon seit gestern Mittag an dem gleichen Problem  und verzweifle trotz Google, Mailinglisten, Selbstversuchen, etc... langsam daran. Es handelt sich um ein allgemein bekanntes Problem, dass bei mir allerdings aus irgendeinem Grund auf keinen der normal beschriebenen Bugfixes anspringt. 

Meine Aufgabe besteht zur zeit darin, mit Hilfe des PEAR Paketes für XML-RPC eine kleine Server-Datei und eine kleine Client-Datei zum Laufen zu bringen.

Ich habe 2 Testdateien servertest.php und clienttest.php angelegt (mittlerweile sogar kopierte Quelltexte von einem PHP.net Benutzer die nachweislichen funktionierten). In der Datei servertest.php wird eine Variable $HTTP_RAW_POST_DATA benötigt. Diese ist jedoch leer.

In Mailinglisten, etc... Bin ich immer wieder darauf gestoßen, dass die Konfiguration von always_populate_raw_post_data auf on stehen muss. Dies habe ich auch gemacht. Allerdings ist die Variable immer noch leer. Der Vorschlag auf file_get_contents('php://input' ) auszuweichen ist bei mir leider auch nicht angesprungen. file_get_contents('php://input' )ist bei mir ebenfalls leer.

Vielleicht hat jemand von Ihnen einmal das selbe Problem gehabt und kann mir kurz weiterhelfen. Ich wäre ihnen wirklich sehr dankbar da ich mittlerweile soweit bin in meine Tastatur zu beissen.

Für den Fall das ihnen das weiterhilft habe ich hier auch noch einmal das Listing für Sie (herzlichen dank an steph at zend dot com)

------------------------------------------------------------
Clienttest.php
------------------------------------------------------------

<?php

echo ini_get(always_populate_raw_post_data);

function do_call($host, $port, $request) {
   
    $fp = fopen( 'http://lima-pro1/szeiger/XMLRPC/servertest.php', 'r' );
    $query = "POST http://lima-pro1/szeiger/XMLRPC/servertest.php HTTP/1.0\nUser_Agent: My Egg Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";

    if (!fputs($fp, $query, strlen($query))) {
        $errstr = "Write error";
        return 0;
    }

    $contents = '';
    while (!feof($fp)) {
        $contents .= fgets($fp);
    }

    fclose($fp);
    return $contents;
}

$host = 'localhost';
$port = 80;
$request = xmlrpc_encode_request('cycle', 'egg');
$response = do_call($host, $port, $request);

// do something with $response, e.g. print it

echo $response;

?> 

------------------------------------------------------------
Servertest.php
------------------------------------------------------------

<?php

function lifecycle($method, $params) {
/* $method = 'cycle', $params = (array of) request parameter(s); $data is also passed from xmlrpc_server_call_method, if we had any data to pass */
    switch($params[0]) {
        case 'egg':
            $reply = 'All eggs will be birds one day.';
        break;
        default:
            $reply = 'That must have been an otheregg';
    }
    return $reply;
}

$server = xmlrpc_server_create();

/* register the 'external' name and then the 'internal' name */
xmlrpc_server_register_method($server, "cycle", "lifecycle");

$request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work.

// experiment with php://input
//$request = file_get_contents('php://input');

// if this is used instead of $HTTP_RAW_POST_DATA, the files are running without problems!
// but that is not what i want :(
/*$request = '<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
<methodName>cycle</methodName>
<params>
 <param>
  <value>
   <string>egg</string>
  </value>
 </param>
</params>
</methodCall>';*/


/* the parameters here are 'server, xml-string and user data'.  There's supposed to be an optional 'output options' array too, but I can't get it working :( hence header() call */
$response = xmlrpc_server_call_method($server, $request, null);
header('Content-Type: text/xml');
print $response;

xmlrpc_server_destroy($server);
?>


Mit freundlichen Grüßen,
Stefanie Zeiger 

php::bar PHP Wiki   -   Listenarchive