PHP开发心得二

如何解决错误:PHP SOAP Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document ?

有以下代码,运行时出现以上错误。其原因也明确,因为__soapCall期望返回XML格式的数据,如果不是就会出错。

    $webservice_url = "http://120.25.XX.XX:3000/service.asmx?WSDL";//webservice地址
    $client = new SoapClientNew($webservice_url);	

	try{
	    $arr = $client->__soapCall(‘FunctionSQL‘,array(‘parameters‘ => $param));//调用其中方法
	}catch(Exception $e){
		echo $e.getMessage();
	}

  

那么,如果我们web service调用返回的是JSON数据就无法使用了吗?网上查了一下,结合个人摸索,以下方式可以绕过此问题,较好解决。

1,建立新类
class SoapClientNew extends SoapClient
{ 

public function __doRequest($request, $location, $action, $version, $one_way = 0)
{ 

$request = parent::__doRequest($request, $location, $action, $version, $one_way);
$GLOBALS[‘$soap_call_result‘] = $request; //重要!此处已经返回结果,保存到全局变量中

// $start = strpos($request, ‘<soap‘);//根据实际情况做处理。。。,如果是<?xml开头,改成<?xml
// $end = strrpos($request, ‘>‘);
// return substr($request, $start, $end-$start+1);
    return $request;
}
}

2,调用新类
$client = new SoapClientNew($webservice_url);
  try{
   $arr = $client->__soapCall(‘FunctionSQL‘,array(‘parameters‘ => $param));//调用其中方法
  }catch(Exception $e){
  }

  $arr = $GLOBALS[‘$soap_call_result‘]; //调用后读取全局变量,即可获得调用结果
print_r($arr);

  

时间: 2024-10-01 02:16:18

PHP开发心得二的相关文章

安卓版App开发心得

从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下. 1.开发环境和参考资料 由于学会FQ的时间比较短(2016年7月才学会),现在在用的mac版AndroidStudio是在国内某站上下载的.今年将开发环境由windows转为mac了,好在各种IDE都是跨平台的,迁过来后麻烦不多,Android Studio也贴心地支持Eclipse风格快捷键,

团队项目开发心得

团队项目开发心得 今天已经是5月31日了,团队项目也已经开展将近一个月的时间(虽然中间因考试耽误了一周半的时间),我们所制作的快递代领app也完成了相当一部分,在这一个月内,我们曾经连续几天晚上都在赶工做项目,也曾因考试冲突而一度停工.经历了这一个月的时间,除了掌握较多Android Studio页面设计的相关知识外,我也有许多感悟和体会,下面就来和大家分享一下. 时间都是挤出来的 在开展团队项目之前,在很长一段时间内我都认为不可能在一个学期内完成这么庞大的一个项目,原因有二: 其一,我们组的成

QT开发(二十二)——QMainWindow主窗口

QT开发(二十二)--QMainWindow主窗口 一.主窗口简介 应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成. QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件. QMainWindow内部封装了菜单栏.工具栏.中心组件.停靠组件.状态栏等. QMainWindow内置了布局管理器,基本的组件布局如下: 二.菜单栏 QT中提供了预

QT开发(二十)——QT对话框

QT开发(二十)--QT对话框 一.对话框简介 对话框是与用户进行简短交互的顶层窗口 QDialog是QT中所有对话框窗口的基类,QDialog继承于QWidget,是一种容器型的组件,是定制了窗口样式的特殊QWidget. QDialog作为一种专用的交互窗口,不能作为子部件嵌入其他容器中. 二.对话框类型 对话框类型分为模态对话框和非模态对话框. 1.模态对话框 模态对话框显示后无法与父窗口进行交互,是一种阻塞式的对话框,使用QDialog::exec()函数调用. 模态对话框一般在栈上创建

QT开发(二十七)——QT常用类(一)

QT开发(二十七)--QT常用类(一) 一.QString 1.QString简介 QString提供了Unicode编码的字符串,使用隐式共享技术来节省内存和不必要的数据拷贝,不必考虑跨平台的兼容性. QString类成员函数中除了 ascii().latin1().utf8().local8Bit()函数,其他所有的函数都是可重入的. 2.QString成员函数 QString::QString ( const QChar * unicode, int size ) QString::QSt

QT开发(二十一)——QT布局管理器

QT开发(二十一)--QT布局管理器 一.布局管理器简介 QT中使用绝对定位的布局方式无法自适应窗口的变化. QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小. QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器. 布局管理器不是界面组件,而是界面组件的定位策略. 任意容器类型的组件都可以指定布局管理器. 同一个布局管理器管理中的组件拥有相同的父组件,在设置布局

微信公众平台搭建与开发(二)开发模式的搭建和关键词回复

在第一部分介绍了编辑模式,但是编辑模式有较大局限性,下面主要开始介绍开发模式,这一部门先简单介绍下开发模式的环境搭建和关键词回复. 开发模式首先要有一个虚拟主机,本人使用的是新浪开发者平台的虚拟主机,使用云豆计算流量,若成为新浪开发者用户基本上就可以免费使用了,本人注册用户所赠送的云豆不知道能用多久.当然国内比较大还有就是百度开发者平台,注册后发现部署还没有新浪的方便,并且在BAE3.0以后好像也是要收费的.有兴趣的朋友可以研究下google的开发者平台,不知道是否要收费. 在注册新浪开发者平台

iOS开发——项目实战Swift篇&amp;swift 2.0项目开发总结二(开发常用)

swift 2.0项目开发总结二(开发常用) 一:相册中选择相片到App指定位置 随 着相机像素的提高,实际用户选择的图片都是很大的,有的高达5.6M,如果直接使用用户选着的图片,非常消耗内存,并且也用不到这么高像素的图片,可以当 用户选着好图片后,在UIImagePickerController对应的代理方法中,先将图片进行重新绘制为需要的大小,在设置给iconView 1 /// MARK: 摄像机和相册的操作和代理方法 2 extension MeViewController: UIIma

php后台开发(二)Laravel框架

php后台开发(二)Laravel框架 为了提高后台的开发效率,往往需要选择一套适合自己的开发框架,因此,选择了功能比较完善的Laravel框架,仔细学来,感觉和Python语言的框架Django非常类似. Laravel框架 Laravel是一套web应用开发框架,它具有富于表达性且简洁的语法,并提供了验证(authentication).路由(routing).session和缓存(caching)等开发过程中经常用到的工具或功能. 框架安装 安装composer http://docs.p