图6-4 网站布局ThinkPHP 3.0之前的模板引擎没有布局的概念,但开发人员可以使用include包含文件达到网站布局的效果。布局文件允许嵌套,如果网站页面更加复杂,还可以结合include等标签实现开发需求。另外,如果不需要全局布局,也可以单独在当前页面中使用布局文件,只需要在当前页面头部加上
2023-11-04
PHP 5以插件的形式提供SOAP服务,所以在编译时,需要加入--enable-soap选项。使用phpinfo输出信息时,如果存在SOAP选项,表示服务已经生效,如图12-2所示。
图12-2 SOAP服务
如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。
在Linux操作平台开启SOAP服务的代码如下所示。
SOAP有自己的配置选项,如以下代码所示。
其中选项soap.wsdl_cache_enabled表示是否关闭WSDL数据缓存,值为1时禁用缓存,为了方便程序调试,在开发阶段建议将该项设置为1;soap.wsdl_cache_dir表示缓存存放目录,Windows系统可以设置为c:\tmp;soap.wsdl_cache_ttl表示缓存生命周期,以秒为单位,默认86400;soap.wsdl_cache_limit表示缓存数据大小,以MB为单位。
配置文件修改后,重启PHP服务或者php-fpm,即可生效。如果PHP运行于非安全模式下,上述配置项可以直接在PHP代码中使用ini_set设置,例如关闭WSDL缓存功能,如以下代码所示。
前面提到过PHP既可以作为SOAP的客户端,也可以作为服务端。作为服务端时,使用SoapServer实例类初始化SOAP服务,如以下代码所示。
其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。(www.chuimin.cn)
得到SoapServer实例对象,就可以调用对象中的setClass方法设置WSDL所描述的消息服务。通常情况下,需要将setClass指定实例类描述为可公开调用的服务接口。假设需要将User类描述为WSDL服务接口,代码如下所示。
user.php类文件如以下代码所示。
所有作为公开调用的服务接口,成员类方法必须修饰为public权限。
当PHP作为客户端模式时,使用SoapClient实例类。假设需要调用前面创建的user服务,代码如下所示。
在实际应用开发时,WSDL文件可以是远程的文件,并且支持跨域访问。可以看到,PHP在调用SOAP服务时,开发人员不需要编写任何处理WSDL或者XML文档的过程,只需要像本地开发一样调用对象中的方法即可。
看到这相信读者已经感觉到分布式开发无论是客户端还是服务端,PHP所需要做的工作非常少。关键是WSDL文档模型,这里并没有涉及相关内容,是因为WSDL确实是分布式开发中最重要的文档模型,读者只有彻底理解该文档模型,才能正确开发分布式应用,所以接下来的内容将重点围绕该文档展开。
虽然SOAP开发具有很多优点,但并非没有缺点,在实际开发中应该根据需要考虑是否该使用SOAP代替XML或者Json,存在的缺点主要如下。
➢在PHP中内置的SOAP扩展并不支持生成生成SOA服务,开发人员需要手动创建WSDL文件,而Json或XML等,PHP直接提供生成及解释功能。
➢WSDL文件虽然是SGML文件,但需要使用SOAP协议访问,如果使用普通的浏览器访问WSDL文件,将不能触发相应服务。这就意味着在开发阶段要进行调试,过程将变得复杂。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。
➢能不能使用SOAP,关键是看解释引擎支不支持SOAP协议及SOA服务。虽然主流的技术,例如Object-c、C#、C++、Java等都提供了良好的支持,但常见的JavaScript并不支持SOAP。
有关PHP MVC开发实战的文章
图6-4 网站布局ThinkPHP 3.0之前的模板引擎没有布局的概念,但开发人员可以使用include包含文件达到网站布局的效果。布局文件允许嵌套,如果网站页面更加复杂,还可以结合include等标签实现开发需求。另外,如果不需要全局布局,也可以单独在当前页面中使用布局文件,只需要在当前页面头部加上
2023-11-04
将数据全部缓存到Memcached之后,程序在获取数据时并不直接连接数据库,而是连接缓存服务器。服务器关机后,内存中的数据也将会被清空,所以尽量搭建可容灾的Memcached服务器集群。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
Eclipse是IBM的一个商业项目,2001年11月起IBM将Eclipse贡献给开源社区,从此奠定了Eclipse的地位。Eclipse通过PDT插件来提供PHP开发支持,Eclipse PDT能够让编写PHP变得简单和高效,下面将介绍Eclipse PDT的安装和使用。Eclipse PDT的安装有两种方式,一种是直接通过Eclipse的扩展进行安装;另一种是下载带PDT插件的Eclipse。下面将以Eclipse3.5.2作为基础,讲解Eclipse PDT插件的安装过程。如果下载带PDT插件的Eclipse,只需要双击Eclipse启动程序即可,此时Eclipse就提供了完美的PHP编程支持。......
2023-11-04
与PHP的include不同,在模板中使用include对引擎的解释过程不受任何影响,就算被包含的文件不存在也不会被中断执行。另外URL模式尽量不要使用自定义的URL REWRITE模式,否则目录层级有可能发生改变,导致include找不到文件。......
2023-11-04
下面通过示例代码,演示Cookie函数的实际应用。Cookie能够存放包括中文在内的字符,但长度需要控制在225个字符之内。通过前面的学习,相信读者已经能够掌握Session及Cookie的操作了。虽然Cookie存放于客户端,但是并不意味着Cookie不适合用于会员验证等场景。所以很多网站会使用加密的方式存放Cookie用户名及密码,甚至结合软件与硬件签名实现高度安全的Cookie。总而言之,使用Cookie存放登录数据是可行的,但要做好加密与解密相关操作。......
2023-11-04
相关推荐