#1 chinakr
前言=========
Sina App Engine(SAE)到目前为止还不支持SOAP,但是询问的人不少,我也是一个。对于这些提问,新浪管理员都做了认真回复,给出了解决思路,并且希望有用户能够自己去实现。
SAE文档中心关于SOAP的问题:
http://sae.sina.com.cn/?keyword=SOAP&m=search
为了响应伟大的SAE的号召,为了满足项目的小小需要,SaeSoap诞生了!
基本信息
============
应用名称:
PHP SOAP for ASE
访问方式:
http://saesoap.sinaapp.com/
应用说明:
让SAE原生支持PHP SOAP!
开发环境
============
SAE应用管理 -> 应用管理 -> 代码管理:创建版本1
$ sudo aptitude install php-pear
$ cd /path/to/sae/
$ svn checkout https://svn.sinaapp.com/saesoap/
$ cd saesoap/1
拷贝 pear SOAP, HTTP_Request, Net_Socket, Net_URL,注意目录和文件的权限都必须是755。
$ ln -s /path/to/sae/saesoap/1 /var/www/saesoap
测试代码
============
问题和解决方法
-----------------
$ gvim /path/to/sae/saesoap/1/index.php
require 'SOAP/Client.php';
$uri = 'http://www.5haoxue.net/ws/hello-soap.php';
$client = new SOAP_Client($uri);
$result = $client->call('fetch_news', array());
echo $result;
?>
$ lynx http://localhost/saesoap/
出现了“No Transport for http”错误。这个错误提示是在Transport.php中定义的SOAP_Transport类的getTransport方法中输出的。出错的原因是没有复制SOAP/Transport/目录,在这个目录下有HTTP.php。补上以后测试成功!
在SAE上测试
----------------
$ svn status
$ svn add HTTP/ SOAP/ Net/
$ svn commit -m 'Test pear SOAP client'
$ lynx http://saesoap.sinaapp.com/
发现SAE不支持PEAR:
“
SAE_Warning: require_once(PEAR.php) [function.require-once]: failed to open stream: No such file or directory in SOAP/Base.php on line 30
SAE_Fatal_error: require_once() [function.require]: Failed opening required 'PEAR.php' (include_path='.:/usr/local/sae/php/lib/php/sae_std_lib/') in SOAP/Base.php on line 30
”
管理员说是出于安全性考虑:
http://sae.sina.com.cn/?m=feedback&a=view&id=3262
建议手动安装PEAR,并给出了教程的链接:
http://hi.baidu.com/mleoking/blog/item/ebe307ca55146d43f21fe792.html
直接拷贝PER文件:
$ sudo updatedb
$ locate PEAR.php
$ cp /usr/share/php/PEAR.php /path/to/sae/saesoap/1
$ svn add PEAR.php
$ svn commit -m 'Add PEAR.php'
$ lynx http://saesoap.sinaapp.com/
出现了一些警告信息,但是数据读出来了!警告信息如下:
“
SAE_Warning: include_once(PEAR5.php) [function.include-once]: failed to open stream: No such file or directory in PEAR.php on line 730
SAE_Warning: include_once() [function.include]: Failed opening 'PEAR5.php' for inclusion (include_path='.:/usr/local/sae/php/lib/php/sae_std_lib/') in PEAR.php on line 730
”
继续拷贝PEAR5.php文件:
$ locate PEAR5.php
$ cp /usr/share/php/PEAR5.php /path/to/sae/saesoap/1
$ svn add PEAR5.php
$ svn commit -m 'Add PEAR5.php'
现在没有错误也没有警告了,只剩下一堆SAE_Deprecated和数据了:
“
SAE_Deprecated: Assigning the return value of new by reference is deprecated in SOAP/WSDL.php on line 214
...
SAE_Deprecated: Function split() is deprecated in SOAP/Transport/HTTP.php on line 272
”
现在可以把代码迁移到好学网手机版中去了!
小结
=========
SaeSoap目前实现了在SAE上使用SOAP Client,实现的方式是使用了PEAR SOAP,并不需要对代码进行修改。
SAE上的SOAP Server,目前项目还没有需求,因此暂时也没有时间去实现,希望能有朋友能够抽时间来完成!
SaeSoap Demo:
http://saesoap.sinaapp.com/
基于SpeedPHP和SaeSoap实现的手机版网站:
http://m.5haoxue.net/
2011-12-27 10:26:08