1. 云栖社区>
  2. PHP教程>
  3. 正文

php怎么生成wsdl文件?

作者:用户 来源:互联网 时间:2017-12-01 20:58:25

文件生成

php怎么生成wsdl文件? - 摘要: 本文讲的是php怎么生成wsdl文件?,最近开始准备着手php webservice方面的编程,其中涉及到wsdl文件,这个怎么生成呢,办法有两种:1.zend studio生成对于zend studio 9之前的版本貌似直接生成:File ->New -> Othe

最近开始准备着手php webservice方面的编程,其中涉及到wsdl文件,这个怎么生成呢,办法有两种:
1.zend studio生成
对于zend studio 9之前的版本貌似直接生成:
File ->New -> Other-> Webservice-> WSDL

php怎么生成wsdl文件。
对于zend studio 9需要安装wsdl插件:
1、打开zendstudio9,选择help(帮助)->welcome2、在右边的列表中找到WSDL Support,勾选3、点击Apply changes(应用修改)4、zde会自动安装,然后提示要重启,点击restart now(现在重新启动)
php怎么生成wsdl文件。wsdl支持安装完毕,下面我们来生成一个wsdl文件,步骤如下:1、选择保存wsdl的项目文件夹2、右键-new(新建)->other(其他)3、在弹出的对话框中选择web services,在下级菜单中选择WSDL file,点击next进入下一步4、命名你的wsdl文件,点击next进入下一步5、修改target namespace(目标名称空间),其他不变,点击finish。2.利用SoapDiscovery.class.php生成
这个文件源码:

<?phpclass 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/** * by www.phpddt.com */    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);?>

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件 生成 ,以便于您获取更多的相关知识。