Code前端首页关于Code前端联系我们

phpsoap教程,菜鸟教程 php

terry 3年前 (2023-09-30) 阅读数 46 #PHP
文章标签 addAttribute

本文目录一览:

  • 1、如何使用PHP调用ArcGIS Server的Soap接口
  • 2、php soap 如何设置超时?
  • 3、如何给soap添加header头 php
  • 4、请大神指教用php发送SOAP请求

如何使用PHP调用ArcGIS Server的Soap接口

前一阵子,简单的学习了一下ArcGIS Server,在开发层次上ArcGIS Server支持两种协议,一个是老的Soap协议,也就是webservice,另外一种是REST协议,其中REST协议是从ArcGIS Server9.3开始支持的协议,也是ESRI今后只要支持的协议,但是老的Soap协议还继续支持。该章得内容主要介绍如何使用PHP来调用ArcGIS Server的WebService。

查看ArcGIS Server的SOAP SDK的帮助的时候,会发现所提供的示例代码只有c#,vb.net和java的,并没有PHP语言的示例,实际上并不是不支持PHP语言,从PHP toolkits include PHP-SOAP and NuSOAP上可以看出PHP是支持Soap协议的,只不过使用PHP并没有提供现成的工具可以将WSDL转换成本地化的类,而.NET SDK提供了Wsdl.exe工具,java提供了Apache Axis工具可以将WSDL中的类型转换成本地化类。

当使用PHP调用WebService的时候,当输入的参数是简单数据类型的时候是没有任何问题的,返回值类型是类得时候也没有任何的问题,但是当输入参数的值类型为某个类得时候,就无法调用了,这些类太多了,自己手写这些类几乎是不可能,因此找到一个类似于Wsdl.exe和Apache Axis的工具还是很有必要的,在网上终于搜到一个工具,名字为wsdl2php.php可以实现该功能,其代码如下所示:

// +------------------------------------------------------------------------+

// | wsdl2php |

// +------------------------------------------------------------------------+

// | Copyright (C) 2005 Knut Urdalen |

// +------------------------------------------------------------------------+

// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |

// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |

// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |

// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |

// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |

// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |

// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |

// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |

// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |

// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |

// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |

// +------------------------------------------------------------------------+

// | This software is licensed under the LGPL license. For more information |

// | see |

// +------------------------------------------------------------------------+

ini_set('soap.wsdl_cache_enabled', 0); // disable WSDL cache

//if( $_SERVER['argc'] != 2 ) {

// die("usage: wsdl2php /n");

//}

$wsdl = "liuf:8399/arcgis/services/catchment/MapServer?wsdl";

print "Analyzing WSDL";

try {

$client = new SoapClient($wsdl);

} catch(SoapFault $e) {

die($e);

}

print ".";

$dom = DOMDocument::load($wsdl);

print ".";

// get documentation

$nodes = $dom-getElementsByTagName('documentation');

$doc = array('service' = '',

'operations' = array());

foreach($nodes as $node) {

if( $node-parentNode-localName == 'service' ) {

$doc['service'] = trim($node-parentNode-nodeValue);

} else if( $node-parentNode-localName == 'operation' ) {

$operation = $node-parentNode-getAttribute('name');

//$parameterOrder = $node-parentNode-getAttribute('parameterOrder');

$doc['operations'][$operation] = trim($node-nodeValue);

}

}

print ".";

// get targetNamespace

$targetNamespace = '';

$nodes = $dom-getElementsByTagName('definitions');

foreach($nodes as $node) {

$targetNamespace = $node-getAttribute('targetNamespace');

}

print ".";

// declare service

$service = array('class' = $dom-getElementsByTagNameNS('*', 'service')-item(0)-getAttribute('name'),

'wsdl' = $wsdl,

'doc' = $doc['service'],

'functions' = array());

print ".";

// PHP keywords - can not be used as constants, class names or function names!

$reserved_keywords = array('and', 'or', 'xor', 'as', 'break', 'case', 'cfunction', 'class', 'continue', 'declare', 'const', 'default', 'do', 'else', 'elseif', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'extends', 'for', 'foreach', 'function', 'global', 'if', 'new', 'old_function', 'static', 'switch', 'use', 'var', 'while', 'array', 'die', 'echo', 'empty', 'exit', 'include', 'include_once', 'isset', 'list', 'print', 'require', 'require_once', 'return', 'unset', '__file__', '__line__', '__function__', '__class__', 'abstract', 'private', 'public', 'protected', 'throw', 'try');

php soap 如何设置超时?

在使用soap前,先检查soap的url是否可访问。如为true则继续执行Soap,否则给出超时提醒。

下面是我经常使用的判断网站链接是否可用的函数,希望对你有用。

//判断URL在指定时间内是否有相应

function checkUrl($url, $timeout = 3){

$ret = false;

$handle = curl_init();

curl_setopt($handle, CURLOPT_URL,$url);

curl_setopt($handle, CURLOPT_NOBODY, true);

curl_setopt($handle, CURLOPT_TIMEOUT,$timeout);//设置默认超时时间为3秒

$result = curl_exec($handle);

$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);

curl_close($handle);

if(strpos($httpCode,'2') == 0){

$ret = true;

}

return $ret;

}

如何给soap添加header头 php

使用php 设置soapHeader时要如下进行,不然发出去的包会变成类似“itemkeyuser/keyvalue23107720/value/item”的格式:  $auth_header = array( 'user'=$key, 'password'=$pwd );  // 下面的RequestSOAPHeader 对应 wsdl 定义里面的 xsd:element name="RequestSOAPHeader"..... $authvalues = new SoapVar($auth_header, SOAP_ENC_OBJECT,"RequestSOAPHeader",$uri); $header = new SoapHeader($uri, 'RequestSOAPHeader', $authvalues); $api = new SoapClient(null,$options); $api-__setSoapHeaders(array($header));不明白的话可以去后盾人看看相关的教学视频。

请大神指教用php发送SOAP请求

使用PHP中的soap类进行soap请求,请求的数据要跟wsdl中的数据类型一致,返回的数据也是由WSDL中定义好了的按照定义去取数据即可。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门