php生成wsdl文件方法总结

在zend studio9中,与之前版本不一样的是,你需要单独安装wsdl插件,才可以使用,步骤如下:

1、打开zendstudio9,选择help(帮助)->welcome(欢迎

2、在右边的列表中找到WSDL Support,勾选

3、点击Apply changes(应用修改)

4、zde会自动安装,然后提示要重启,点击restart now(现在重新启动)

wsdl支持安装完毕,下面我们来生成一个wsdl文件,步骤如下:

1、选择保存wsdl的项目文件夹

2、右键-new(新建)->other(其他)

3、在弹出的对话框中选择web services,在下级菜单中选择WSDL file,点击next进入下一步

4、命名你的wsdl文件,点击next进入下一步

5、修改target namespace(目标名称空间),其他不变,点击finish。

一个wsdl文件生成完毕,如下图所示:

TestSoapSoap下面填写php webService 如soapservice.php

在NewOperation上点击鼠标右键:
NewOperation:添加方法。WebService里需要提供给别人调用的方法名
input :设置输入参数名和类型
output:设置返回值。
Add part:如果在input里添加,就是添加多个参数
set Type / set Element: 设置参数的input/output类型Type包含常见的数据类型(int,string,boolean,float,time…),Element就是自定义元素类型。

.利用SoapDiscovery.class.php生成

 代码如下 复制代码
<?php
class SoapDiscovery {
 private $class_name = '';
 private $service_name = '';
 
 /**
  * SoapDiscovery::__construct() SoapDiscovery class Constructor.
  *
  * @param string $class_name
  * @param string $service_name
  **/
 public function __construct($class_name = '', $service_name = '') {
  $this->class_name = $class_name;
  $this->service_name = $service_name;
 }
 
 /**
  * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
  *
  * @return string
  **/
 public function getWSDL() {
  if (empty($this->service_name)) {
   throw new Exception('No service name.');
  }
  $headerWSDL = "<?xml version="1.0" ?>n";
  $headerWSDL.= "<definitions name="$this->service_name" targetNamespace="urn:$this->service_name" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:$this->service_name" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns="http://schemas.xmlsoap.org/wsdl/">n";
  $headerWSDL.= "<types xmlns="http://schemas.xmlsoap.org/wsdl/" />n";
 
  if (empty($this->class_name)) {
   throw new Exception('No class name.');
  }
  
  $class = new ReflectionClass($this->class_name);
  
  if (!$class->isInstantiable()) {
   throw new Exception('Class is not instantiable.');
  }
  
  $methods = $class->getMethods();
  
  $portTypeWSDL = '<portType name="'.$this->service_name.'Port">';
  $bindingWSDL = '<binding name="'.$this->service_name.'Binding" type="tns:'.$this->service_name."Port">n<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />n";
  $serviceWSDL = '<service name="'.$this->service_name."">n<documentation />n<port name="".$this->service_name.'Port" binding="tns:'.$this->service_name."Binding"><soap:address location="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."" />n</port>n</service>n";
  $messageWSDL = '';
  foreach ($methods as $method) {
   if ($method->isPublic() && !$method->isConstructor()) {
    $portTypeWSDL.= '<operation name="'.$method->getName()."">n".'<input message="tns:'.$method->getName()."Request" />n<output message="tns:".$method->getName()."Response" />n</operation>n";
    $bindingWSDL.= '<operation name="'.$method->getName()."">n".'<soap:operation soapAction="urn:'.$this->service_name.'#'.$this->class_name.'#'.$method->getName()."" />n<input><soap:body use="encoded" namespace="urn:$this->service_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />n</input>n<output>n<soap:body use="encoded" namespace="urn:$this->service_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />n</output>n</operation>n";
       $messageWSDL.= '<message name="'.$method->getName()."Request">n";
    $parameters = $method->getParameters();
    foreach ($parameters as $parameter) {
     $messageWSDL.= '<part name="'.$parameter->getName()."" type="xsd:string" />n";
    }
    $messageWSDL.= "</message>n";
    $messageWSDL.= '<message name="'.$method->getName()."Response">n";
    $messageWSDL.= '<part name="'.$method->getName()."" type="xsd:string" />n";
    $messageWSDL.= "</message>n";
   }
  }
  $portTypeWSDL.= "</portType>n";
  $bindingWSDL.= "</binding>n";
  return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
 }
 
 /**
  * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
  *
  * @return string
  **/
 public function getDiscovery() {
  return "<?xml version="1.0" ?>n<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/" xmlns:scl="http://schemas.xmlsoap.org/disco/scl/">n<scl:contractRef ref="http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."?wsdl" />n</disco:discovery>";
 }
}
 
?>

使用案例:

 代码如下 复制代码

<?php
    include("Compute.php"); //你要生成的文件
    include("SoapDiscovery.class.php");
   
    $disco = new SoapDiscovery('Compute','Compute');//第一个参数是类名(生成的wsdl文件就是以它来命名的),即person类,第二个参数是服务的名字(这个可以随便写)。
    $wsdl = $disco->getWSDL();
    //$disco->getDiscovery();
    $fp = fopen("Compute.wsdl", "w");
    fwrite($fp, $wsdl);
?>

方法二最重要的就是我们的SoapDiscovery.class.php文件了,这个文件网上有下载大家可百度找一下。

时间: 2024-09-29 00:50:25

php生成wsdl文件方法总结的相关文章

xfire-使用XFire框架直接生成wsdl文件时,如何改变变量名

问题描述 使用XFire框架直接生成wsdl文件时,如何改变变量名 10C 如图所示,如何才能将小写的字母改成大写?PS:在代码中我已经将所有成员变量都写成大写了,但是生成出来的name,只要有下滑先的,第一个字母都变成小写.有没有变法可以把它变成大写?

asp.net c#生成excel文件方法

asp教程.net c#生成excel文件方法 Handler.ashx:生成动态Excel文件 public class Handler : IHttpHandler {     public void ProcessRequest (HttpContext context) {         context.Response.ContentType = "application/octet-stream";         string filename = HttpUtilit

php生成html文件方法总结_php实例

我经常会在网上看到有人问怎么将整个动态的网站静态化,其实实现的方法很简单. 复制代码 代码如下: <?php //在你的开始处加入 ob_start(); ob_start(); //以下是你的代码 //在结尾加入 ob_end_clean(),并把本页输出到一个变量中 $temp = ob_get_contents(); ob_end_clean(); //写入文件 $fp = fopen('文件名','w'); fwrite($fp,$temp) or die('写文件错误'); ?> 这

有关php接口的wsdl文件

问题描述 有关php接口的wsdl文件 请问一下,我调用http://***/index.php?wsdl 这样的接口地址做成c#的web服务.但是有一个调用其中的一个方法却报错了,之前调用的2个方法没问题.错误提示:System.Web.Services.Protocols.SoapException: Operation 'extenBinding' is not defined in the WSDL for this service 解决方案 php中soap 的使用实例和一些个人看法!

PHP中实现生成静态文件的方法缓解服务器压力

 使用生成静态文件的方法解决服务器与数据库访问压力,下面有个不错的教程,感兴趣的朋友可以参考下 互联网快速普及的现在社会,越来越多的人会在一个web应用上进行交流,因而导致服务器与数据库访问压力与日俱增,这边就需要进行一些优化,譬如增加缓存.二级缓存.动态网页静态化以及其他的高端技术.    此处作者是使用生成静态文件的方法:  代码如下: /**  * @desc 生成静态文件时使用  * @todo htmlcache  * @param $root string html文件存放路径  *

python通过openpyxl生成Excel文件的方法

  本文实例讲述了python通过openpyxl生成Excel文件的方法.分享给大家供大家参考.具体如下: 使用前请先安装openpyxl: ? 1 easy_install openpyxl 通过这个模块可以很方便的导出数据到Excel ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 from op

使用PHP生成XML文件的四种方法

  使用PHP生成XML文件的四种方法   content1 2009-10-11 content2 2009-11-11   [直接生成字符串] 方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件.这是最原始的生成XML的方法,不过有效! PHP代码如下: $data_array = array( array( 'title' => 'title1', 'content' => 'content1', 'pubdate' => '2009-10-11',

PHP实现HTML生成PDF文件的方法_php技巧

本文实例讲述了在linux中利用HTML2FPDF与wkhtmltoimage把网页html直接生成pdf格式的文件方法,分享给大家供大家参考.具体实现方法如下: 找到一款在FPDF和HTML2FPDF源码基础上开发的一套开源程序,作者很给力.基本解决了中文(以及日语.韩语及东南亚和全球语言)乱码的问题,在Windows/Linux开发环境下测试可用,不需要安装别的组件支持,是没有VPS和独立服务器的网站开发者的福音. 不多说,源码名称是MPDF,官方地址是:http://www.mpdf1.c

PHP读取CURL模拟登录时生成Cookie文件的方法_php技巧

本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登录时会保存一个Cookie文件,例如下面的代码 复制代码 代码如下: $login_url = 'XXX';    $post_fields['email'] = 'XXXX';  $post_fields['password'] = 'XXXX';  $post_fields['origURL'] = 'XXX';  $post_fields['doma