变相怪杰 发表于 2015-2-4 00:29:46

PHP网站制作之PHP5中利用Web办事会见J2EE使用法式(4)...

基础这个东西,有人问学php需要任何基础不?j2ee|php5|web|web办事|法式|会见   处置 SOAP 毛病

  假如运转客户机时呈现毛病怎样办?与其他言语(如 Java)一样,PHP 5 新增添了一种异常机制。ext/soap 利用这类新的机制,以 SoapFault 对象的模式前往毛病。例如说,可以用上面这类模式将代码包装起来:

try {
... some SOAP operation
} catch (SoapFault $soapFault) {
echo $soapFault;
}
  注重,与 Java 有所分歧,PHP 言语的 try - catch 块不克不及包括 finally 子句。

  SoapFault 可以在当地生成。例如说,假定输错了 getForecast 的 startDate 参数。客户机的输入就会酿成:

SoapFault exception:
SOAP-ERROR: Encoding: object hasn't 'startDate' property in WeatherClientEJB.php:32
Stack trace: #0 WeatherClientEJB.php(32): SoapClient->getForecast('getForecast', Array)
#1 WeatherClientEJB.php(73): displayForecast(Array)
#2 {main}
  注重,个中没有 trace 输入,由于并没有发送恳求。SOAP_ENV:Client 是 SOAP 标准中为 Faulty body 元素 Faultcode 字段界说的值之一。

  这个 SoapFault 是在 ext/soap 外部发明毛病时生成的,它没有发送 SOAP 动静。然而 SoapFaults 也能够呈报办事器上发明的毛病。好比,假定修正代码,将 startDate 参数的值设成“badDateString”。这是一个不法的 ISO 8601 字符串,然而 ext/soap 没有反省供应的格局,仅仅把动静发送到办事器,而办事器回绝该恳求:

Request :
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://session.itso">
<SOAP-ENV:Body>
<ns1:getForecast>
<ns1:startDate>badDateString</ns1:startDate>
<ns1:days>2</ns1:days>
</ns1:getForecast>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Response :
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<Fault xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode xmlns="">Server.generalException</faultcode>
<faultstring xmlns="">
<![CDATA[java.lang.NumberFormatException:
WSWS3046E: Error: Invalid date/time: badDateString]]>
</faultstring>
<detail xmlns=""/>
</Fault>
</soapenv:Body>
</soapenv:Envelope>

SoapFault exception: java.lang.NumberFormatException:
WSWS3046E: Error: Invalid date/time: badDateString in WeatherClientEJB.php:32
Stack trace: #0 WeatherClientEJB.php(32): SoapClient->getForecast('getForecast', Array)
#1 WeatherClientEJB.php(73): displayForecast(Array)
#2 {main}
  这一次,SOAP 恳求传递给了办事器,然而由于日期格局有效而被回绝。WeatherForecastEJB 完成抛出一个 java.lang.NumberFormatException,该异常在 SOAP 应对中作为 Faulty body 元素前往,然后作为一个 SoapFault 异常呈报给客户机。

  回护 Web 办事

  咱们考查了三种平安办法,和若何在 PHP 中利用它们:

  根基 HTTP 身份验证

  假如 HTTP 办事器请求客户机停止身份验证,就会恳求用户输出 id 和口令并在应对中增添 Authentication Required HTTP 头文件。在停止后续操作之前,客户机必需呼应包括可承受 Authorization HTTP 头文件的恳求。

  恳求 HTTP 身份验证的凡是是 Web 办事器,而不是 Web 办事供应者。Authentication Required HTTP 头文件被传递给阅读器,阅读器弹出对话框恳求用户 id 和口令,然后将用户的应对作为 HTTP Authorization 头文件发送给 Web 办事器。在 PHP 剧本中很轻易完成这一点,可使用 header() 函数发送需求的 HTTP 头文件字段。例如:

if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Weather"');
header("HTTP/1.0 401 Unauthorized");
}
echo "Welcome " . $_SERVER['PHP_AUTH_USER'];
  PHP 手册中的利用 PHP 停止 HTTP 身份验证 一章具体引见了这个进程。

  您能够碰到如许一些 Web 办事,这些办事的供应者请求 PHP Web 办事客户机利用 HTTP 停止验证身份。ext/soap 供应了一种复杂的发送 HTTP Authorization 恳求头文件的办法,利用传递给 SoapClient 机关函数的 options 数组:

$soapClient = new SoapClient("http://localhost:9080/" .
"ItsoWebService2RouterWeb/wsdl/itso/session/WeatherForecastEJB.wsdl",
array('login' => "userid",
'password' => "password"));
  然而,人们以为 HTTP 根基身份验证不是一种平安的用户验证办法(除非联合利用其他内部平安体系,如 SSL),由于用户名和口令是以明文模式在收集上传递的。 HTTP Digest 验证经由过程加密口令改善了这类办法,然而并非一切的阅读器都撑持这类改善。并且,PHP 的 header() 函数只撑持根基身份验证。

  SSL(平安套接字层)

  一种加倍平安的协定是 HTTPS(HTTP over SSL),它利用 SSL 加密 HTTP 动静。SSL 在传输层上任务,不懂得 HTTP 或 SOAP 协定。因而,它不克不及只加密动静中的敏感成份,而必需加密全部动静。HTTPS 可以在阅读器与 Web 办事器之间,或 Web 办事器与 Web 办事供应者之间利用。

  假如编译并启用了 OpenSSL,那末 PHP 还可以撑持 HTTPS。若何在 PHP 剧本中利用 SSL,请参阅 PHP 手册中的 OpenSSL 一章。

  身份验证怎样呢?SSL 可以发送平安证书,对方可以承受或回绝该平安证书。假如请求客户机验证 Web 办事供应者(如电子商务使用法式),那末这类办法很无效。然而假如 Web 办事自己供应敏感信息的会见,那末 Web 办事供应者仍是需求验证每一个客户。基于证书的身份验证其实不适合,由于客户能够良多,并且是静态的,事前为每一个客户分发恰当的证书不太实际。

  WS-Security

  WS-Security 尺度为 Web 办事平安供应了分歧的办法。今朝咱们所考查的平安掌握都在 SOAP 协定以外。然而 WS-Security 是经由过程在 SOAP 动静中增添平安头文件来完成平安掌握的。好比,关于 WS-Security 根基身份验证(与 HTTP 根基身份验证分歧),上面的标签将呈现在 SOAP 头文件中:

<wsse:UsernameToken>
<wsse:Username>userid</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
  这只是一个复杂的例子,不外,完全的平安扩大集长短常完美的,不但包含身份验证,还包含完全性、保密性,等等。

  今朝 ext/soap 中还没无为 WS-Security 供应很好的撑持。因而,假如要在 PHP 中发送和吸收 WS-Security 头文件,那末必需深切到更底层的接口,显式地创立 SOAP 头文件。到今朝为止,示例中利用的都是 ext/soap 的 WSDL 形式。然而,还有一种非 WSDL 形式,可以用它来掌握全部 SOAP 动静。固然也必需在代码中做大批的任务。可使用 SoapHeader、SoapParam 和 SoapVar 类创立动静,然后用 SoapClient::__call 发送 SOAP 恳求和吸收呼应。假如没有任何内置撑持,那末在 PHP 中编写 Web 办事平安扩大(或其他初级标准如 WS-Transactions)将是一项相当艰难的义务,咱们不盘算在本文中停止这方面的测验考试。

  停止语

  利用 PHP SOAP 扩大其实不难。不管办事器是若何完成的,只需求几行代码,就能够开辟出会见复杂 Web 办事的 PHP 剧本。与平常一样,PHP 在易用性上体现十分精彩。本文次要会商了若何利用 SoapClient 类会见异构收集上的现有 Web 办事,然而经由过程利用 ext/soap,使用 SoapServer 类也能够安排 Web 办事,一样十分直不雅。

  假如要处置更庞杂的交互,ext/soap 以后的版本不克不及给咱们供应良多匡助。从 XML 形式到 PHP 的映照有时分不敷明晰,只能经由过程实验或研讨源代码来验证。假如但愿利用更先辈的 Web 办事协定,唯一的选择就是深切研讨非 WSDL 形式,用本人的剧本创立 SOAP 头文件,但如许做十分有趣并且轻易失足。

  Web 办事的一项主要主意是分歧平台、操作体系和编程言语的互操作性。自力的 WS-I (Web Services Interoperability) Organization 供应了一个测试包,以验证对其 Basic Profile 的顺应性,咱们但愿看到 ext/soap 可以到达某种水平,体现出它可以顺应。咱们也但愿 ext/soap 持续开展,成为 PHP 的主流扩大。大部分语言的基础,不是说c有多好,而是c相对起手容易学,让你认为这个是编程语言,

再现理想 发表于 2015-2-4 13:14:31

在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。

兰色精灵 发表于 2015-2-8 16:06:11

本文当是我的笔记啦,遇到的问题随时填充

第二个灵魂 发表于 2015-2-22 10:57:21

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

山那边是海 发表于 2015-3-5 20:17:58

基础有没有对学习php没有太大区别,关键是兴趣。

飘灵儿 发表于 2015-3-11 10:19:45

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

小妖女 发表于 2015-3-14 09:12:24

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

小魔女 发表于 2015-3-21 01:24:12

爱上php,他也会爱上你。

爱飞 发表于 2015-3-21 06:09:22

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

灵魂腐蚀 发表于 2015-4-9 11:11:11

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

若相依 发表于 2015-4-12 16:13:53

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

变相怪杰 发表于 2015-4-13 11:04:19

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

仓酷云 发表于 2015-4-18 16:48:39

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

深爱那片海 发表于 2015-4-22 10:07:18

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

蒙在股里 发表于 2015-5-6 17:34:40

我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。

海妖 发表于 2015-6-12 04:53:56

为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。

不帅 发表于 2015-6-13 21:47:57

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

分手快乐 发表于 2015-6-26 20:49:28

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

只想知道 发表于 2015-7-6 00:06:48

多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。

金色的骷髅 发表于 2015-7-12 23:02:05

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
页: [1] 2
查看完整版本: PHP网站制作之PHP5中利用Web办事会见J2EE使用法式(4)...