越歇越懒,越吃越馋,越睡越困,越扇越热

这日子怎么过

 
大少爷 @ 2006-12-27 16:34

给我爱的人——by songqi

迷惘的双眼
惟有在你那里
可以看到方向

疲惫的身体
惟有在你那里
才会感到舒适

浮躁的心
惟有在你那里
能够得到净化

埋藏心底的话语
惟有在你那里
才能得以倾诉

你是上天赐给我的那棵木棉
我们相伴相依,共同成长

不论寒暑,不论风雨
我们都将一同经历

我的爱
惟有在你那里
才是永远的归宿

 2006年12月27日



 
大少爷 @ 2006-11-24 16:58

前言
废话不多说,WebService这个热啊,PHP这个火啊,想用PHP开发WebService是理所当然的事。什么?不懂WebService?没事,百度一下就知道了。啊?看不懂?不懂也没关系,直接看大少爷写的吧:)
大少爷是个激进分子,喜欢直接拿代码说事,不过在把可怜的读者弄得一头雾水之前,还是先大致说一下本文的目的。本文不打算讲述WebService的概念,也不打算讲那些复杂的协议内容。本文只是要让大家看看对于WebService,PHP可以做些什么,怎么做,有什么要注意的。
如果你刚才听了大少爷的查了百度,或者你以前查过,你应该已经大概知道了WebService的用处。通过WebService,我们可以调用部署在其他地方的程序,而不用care被调用的程序是在什么平台用什么语言编写的。也许你听说过GoogleAPI、YahooAPI什么的,大少爷虽然没有挨个调查过,但知道至少google是遵照标准的Web Service实现的,google用的是java,我们这里将使用PHP。
开始:Hello Word!
先来看代码:
<?php
/**
* 实现业务逻辑的类,此类是一个普通类
*
*/
class Basic {
       /**
        * 返回一个字符串:Hello World!
        *
        * @return string
        */
       public function returnString(){
               return "Hello World!";
       }
}
?>
so简单,一个类,返回一个字符串。假设这个程序在服务器A上面,如果大少爷想在服务器B上面想调用这个程序怎么办?首先我们先要将这个类变成Web服务,这就需要使用PHP的SOAP扩展,如何安装这个扩展请参考PHP手册。安装好后,请看如下代码。
<?php
/**
* Web Service的Server端,包含类文件。
*/
require_once("Basic.php");
/**
* 创建Server对象
*/
$arrOptions = array('uri'=>'http://example.com/');    //设置命名空间
$objSoapServer = new SoapServer(null,$arrOptions);
/**
* 注册Basic类的所有方法
*/
$objSoapServer->setClass("Basic");
/**
* 处理请求
*/
$objSoapServer->handle();
?>
OK,一个Web服务搭建好了,上面的例子中,我们创建了一个SoapServer对象,然后利用setClass函数将我们刚才编写的Basic类set进去,最后handle(),那个命名空间我们先不去管它。现在如果用浏览器访问这个文件,会出现警告,这是正常的,因为这个文件不是用浏览器访问的,而是用另一个程序访问的。当一个客户端程序访问我们的WebService时,运行到handle()时会对客户端的输入进行处理,并输出结果给各户端。这里需要注意一下,不要在handle()之前和之后输出任何东西,否则客户端会处理不了。
好了,我们要编写客户端访问这个WebService。
<?php
/**
* Client端,首先创建Client对象
*/
$arrOptions = array('uri'=>'http://example.com/',                     //设置命名空间
                       'location'=>'http://url/to/our/webservice',        //设置Server地址
                       'trace'=>true);
$objSoapClient = new SoapClient(null,$arrOptions);
/**
* 远程调用
*/
try{
   $strReturn = $objSoapClient->returnString();
}catch(Exception $e){
}
/**
* 打印结果
*/
echo $strReturn;
?>
上面这个程序,我们首先创建了一个SoapClient对象,然后就像使用服务端的Basic对象一样调用returnString方法,并打印输出结果。不论你把这个PHP放在哪台服务器,只要它和服务端的网络能够相连,就能够得到我们期望的结果:Hello World!。
不论是SoapServer还是SoapClient,都接收两个参数,其中第二个参数是Option,它支持若干选项,这里我们用到的有:
uri:命名空间,客户端和服务端需要使用相同的命名空间
location:客户端用,用来指定服务端程序的访问地址,也就是本例第二段代码的程序地址。
trace:客户端用,为true时可以获取服务端和客户端通信的内容,以供调试。
你可以尝试将第一段代码扩展一下,填写更多的函数,看看返回整型、浮点型、数组、对象分别是什么样子,也可以尝试从客户端接收参数,处理一下再返回,或者利用SoapClient的函数跟踪一下客户端和服务端通信的内容(关于这些函数请查看PHP文档),你暂时可以不用太关心通信内容的含义。
如果你按照大少爷说的进行了尝试,你会发现,基本上服务端返回什么数据类型,客户端可以接收到什么数据类型,但是当服务端返回对象时,客户端接收到的是一个stdClass对象,并且其属性的可见性并非按照服务端定义的,而是全部的public。
有经验的读者可能会问,如果客户端和服务端的编码不同怎么办?在Option中,有一个选项encoding,可以在客户端和服务端使用,用以指定文字的编码。比如你的服务端是gbk编码的,客户端是utf8编码的,就分别在服务端和客户端填入gbk和utf8。注意,此选项不会更改客户端和服务端通信内容的编码(它永远是utf8的),而只是在两端接受到通信内容后进行编码转换。
好了,第一个例子讲完了,应该不难。不过,这只是最基础的东西而已,我们知道PHP是弱类型的语言,对于强类型的语言来说(C、C++、Java),他们怎么识别PHP返回的数据类型呢?请继续往下看。
。。。未完待续   


 
大少爷 @ 2006-10-18 18:37

http://www.djkaty.com/drupal/php-wsdl

有空我会翻译一下。


 
大少爷 @ 2006-09-17 00:52

到处都没有搜到中文资料,英文的rfc太长,懒得看。
问题是这样的,这两天写网站的时候,因为使用的是UTF-8编码,在给邮箱发信件的时候,发现是乱码,于是加了header,使用html方式,但是新建标题依然乱码,最好找到个方法,将标题改为:"=?UTF-8?B?".base64_encode($strTitle)."?=",其中“.”是PHP里的字符串连接运算符,base64_encode看名字就知道了。照这个方法发送的邮件,可以正常显示标题。
哪位高人解释一下这原理吧,到底邮件的协议是怎么样的


 
大少爷 @ 2006-07-26 16:05

今天偶然间发现了个不错的东东,名叫:Standard PHP Library (SPL) Functions
在PHP5中是默认编译的,如果你用PHP5的话,可以直接使用它。它有什么作用的,举个简单的例子:

<?php
class Test implements Countable  {
 private $intCount = null;
 public function __construct($intCount){
  $this->intCount = $intCount;
 }
 public function count(){
  return $this->intCount;
 }
}

$object = new Test(15);
echo count($object);
?>
输出15,Countable是SPL中定义的一个接口,实现这个接口的类可以直接“hook”到count()函数中去,也就是说你可以用count()直接count你的object,好玩吧。Countable只不过是一个最简单的接口,还有很多比如ArrayObject,可以让你像访问array一样访问你的object,很可爱吧。更多的功能自己去发掘吧,文档地址在:http://www.php.net/~helly/php/ext/spl/



 
网志分类
所有网志
web开发
日记
我的杂文
Shell Programming Tips
相册
未分类
最新的评论
日 历

站内搜索
友情链接
· 我的歪酷 非非共享界 · 老婆的blog · kaito · zation99 · 班级blog · 旦旦 · 霏昀 · boxlee · 青越

订阅 RSS

0012453

歪酷博客

www.flickr.com
大少爷的照片更多 大少爷的照片