PHP中的SOAP服务器和客户端

时间:2010-05-12 08:04:31

标签: php soap

我正在尝试用PHP开发一个非常简单的SOAP服务器和客户端。 目标是从远程XML文档接收内容作为源。

这是我到目前为止所做的,我需要帮助如何从普通数组中提取XML文件中的数据,就像现在一样。 这是在inventory_functions.php中找到的从数组中获取的函数,如何将其更改为从XML文件中获取? 我是在正确的轨道上,这是一个SOAP设置吗?

  function getItemCount($upc) {

    // In reality, this data would be coming from a database

    $items = array('12345'=>5,'19283'=>100,'23489'=>'234');

    // Return the requested value

    return $items[$upc];

}

这是服务器的代码:

  // Load the database

  require 'inventory_functions.php';

  // Turn off WSDL cache

  ini_set("soap.wsdl_cache_enabled", "0");

  // Create a new SoapServer object with inventory.wsdl

  $server = new SoapServer("inventory.wsdl");

  // Register the getItemCount function

  $server->addFunction("getItemCount");

  // Start the handle

  $server->handle();

这是客户端的代码:

// Turn off WSDL cache

ini_set("soap.wsdl_cache_enabled", "0");

// Create a new SOAPClient object

$client = new SoapClient("inventory.wsdl");

// Get the value for the function getItemCount with the ID of 12345

$getItemCount = $client->getItemCount('12345');

// Print the result

echo ($getItemCount);

请帮忙!

2 个答案:

答案 0 :(得分:2)

问题不是SOAP服务器问题,而是XML访问。

假设您的XML包含与示例中引用的数组相同的数据,并且您可以在服务器上获得simpleXML

//load your xml file into $xmlStr, with file_get_contents() or whatever.
$xmlObj = simplexml_load_string($xmlStr);
$items = objectsIntoArray($xmlObj);

你也可以使用DomDocument,它有一个DOM API,所以如果你熟悉HTML DOM,它会更容易。

在您的示例中,它有一个很大的优势,您可以使用Xpath直接在XML中搜索结果,而不是使用数组。

答案 1 :(得分:0)

为了更好地使用,您可以尝试像http://sourceforge.net/projects/nusoap/这样的肥皂客户端,以获得更好的灵活性。