当前位置: 首页 > 图文教程 > 网络编程 > PHP > 用php实现soap通讯

PHP
PHP代码生成RSS 文档
php中缩略图原理详解
让php也实现多线程
成功安装Mysql+Apache2+php5过程
php简单防刷计数器
PHP个人网站架设连环讲(一)
PHP个人网站架设连环讲(二)
PHP个人网站架设连环讲(三)
PHP 和 XML: 使用expat函数(一)
PHP 和 XML: 使用expat函数(二)
PHP 和 XML: 使用expat函数(三)
用php获得产生随机数的办法
PHP中session一些奇怪的问题
php删除上传的图片及文件夹
PHP控制网页过期时间的代码
PHP文件上传的原理及实现
PHP上传文件涉及到的参数
利用discuz实现PHP大文件上传应用举例
三种php数组输出方法
Mysql中创建用户帐户的方法

PHP 中的 用php实现soap通讯


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 78 ::
收藏到网摘: n/a

用PHP实现Soap通讯 近日用PHP实现Soap通讯,写了一些简单的方法:引用文字
<?
phpfunction HttpSoap($server, $port, $url, $namespace, $action, $data) {$fp = @fsockopen($server, $port);if (!$fp) {return FALSE;} else {$soapData = ConstructData($namespace, $action, $data);$length = strlen($soapData);$out = "POST $url HTTP/1.1\r\n";$out .= "Host: $server\r\n";$out .= "Content-Type: text/xml; charset=utf-8\r\n";$out .= "Content-Length: $length\r\n";$out .= "SOAPAction: \"$namespace$action\"\r\n\r\n";$out .= $soapData;$out .= "\r\n\r\n";fputs($fp, $out);stream_set_timeout($fp, 2);$header = "";while($line = trim(fgets($fp))) {$header .= $line."\n";}$dataPos = strpos($header, "Content-Length: ") + 16;$dataEnd = strpos($header, "\n", $dataPos);$dataLength = substr($header, $dataPos, $dataEnd - $dataPos);$data = "";if($dataLength > 0) {$data = fread($fp, $dataLength);}fclose($fp);if(strlen($data) != $dataLength || $dataLength <= 0) {return FALSE;}return $data;}}function ConstructData($namespace, $action, $data) {$soapData = "
<?xml version="1.0\" encoding=\"utf-8\"?>
\r\n";$soapData .= "<soap:Envelope xmlns:xsi=\http://www.w3.org/2001/XMLSchema-instance\
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xml
soap.org/soap/envelope/\">\r\n";$soapData .= " <soap:Body>\r\n";$soapData .= " <$action xmlns=\"$namespace\">\r\n";foreach($data as $name => $value) {$name = iconv("GBK","UTF-8",$name);$value= iconv("GBK","UTF-8",$value);$soapData .= " <$name>$value</$name>\r\n";}$soapData .= " </$action>\r\n";$soapData .= " </soap:Body>\r\n";$soapData .= "</soap:Envelope>";return $soapData;}
  1. <?
  2. $data=array(
  3. 'user'=>'测试', //如果需要输入二进制数据请采用BASE64编码
  4. 'pass'=>'test'
  5. ); 
  6. echo HttpSoap('