【求助】我也研究soap了 本帖最后由 kyzy_yy_pm 于 2011-08-02 17:23:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $s==‘kyzy’?那【2】怎么进去? 我的 client传递的是kyzy,如果server端判断$s != 'kzyy'那么久抛出错误 你认为应得到什么结果?php 的 soap 不支持 WSDL 生成,一般只适合做客户端 是啊.php的soap.有强人,完善下就好了.不过nusoap有wsdl生成的,简单的也能用,性能差些罢了 老大,不知道为什么出现下面的情况function say($s){ //这里能得到$s if($s != 'kyzy'){ //这里不能得到,其实在上面if判断中就已经得不到$s了 throw new SoapFault('auth', $s); } return 'Hi';} 我是用那种非wsdl文件传输方式的 其实我一直没弄明白 SoapHeader 的作用 我也是,我想是不是类似一般请求的header头信息 http://ytsmsjh.blog.163.com/blog/static/373165532010931615747/ try { echo $client->say();} catch (Exception $e) { echo $e->getMessage();}--------------------------------------------------------所谓soap,就是普通http post,只不过请求头,和请求body有些差异.只要你设置了soapheader,那么一个具体的soap请求就会拼接上soapheader,换句话说,say是soapserver自动会触发到的验证函数. echo $client->say();--------------------say不是一个可以请求的方法 server : ===============================function say($s){//【1】 if($s != 'kyzy'){//【2】 throw new SoapFault('[User invaild:'.$s.']', 'access deny!'); }}function talk(){ return "hello world";}$server = new SoapServer(null, array('uri' => 'http://localhost'));$server->addFunction('say');$server->addFunction('talk');$server->handle();client:==================================$client = new SoapClient(null, array('uri' => 'http://localhost', 'location' => 'http://localhost/soap/soapserver3.php', 'trace' => true));//$data = array('username' => 'kyzy');$data = 'kyzy';$header = new SoapHeader('http://localhost', 'say', $data, false,SOAP_ACTOR_NEXT);$client->__setSoapHeaders(array($header));try { //echo $client->say(); echo $client->talk();} catch (Exception $e) { echo "Your soap request were :<br/>".htmlspecialchars($client->__getLastRequest()); echo "<br/>===============<br/>"; echo "Your soap response were:<br/>".htmlspecialchars($client->__getLastResponse());} 是什么意思,能说说吗,这个$server->addFunction('say');不可设置成为可以请求的吗 function say($s){ //这里有$s if($s == ''){//这里却没了,就连if中都没法用,无论是$s亦或者是!$s都不成立 throw new SoapFault('safd', 'zhe shi wsm ne'); } return 'Hi';} say不是soap客户端可以请求的一个server方法,这个say你是设置在了soapHeader里的,所以只要server存在这个验证方法,在你请求talk函数的时候,soap server端就会自动先执行say方法。整个http请求头以及body类似以下:#http请求头Post:/s.php Http/1.1Content-length:xxxConnection:close#http请求body<soap:Envelope><soap:Header><!--这里带上say,soap server就知道要先执行say方法进行验证--></soap:Header><soap:Body><!--这里带上talk,这个才是soap客户端可以$soap->call的方法--></soap:Body></soap:Envelope> dreamwear连接 MySql 数据库问题 phpeclipse imagejpeg生成的图片,如何被调用?谢谢 phpmyadmin-3.3.4配置问题 输出一个词中的前二个词与后三个词,在线等 php程序不被显示 页面撑开 学习php! 有关磁盘限额的问题! 关于PHP正则匹配取出数据的问题 获取网站根目录 简单的登陆窗口问题
php 的 soap 不支持 WSDL 生成,一般只适合做客户端
老大,不知道为什么出现下面的情况function say($s){
//这里能得到$s
if($s != 'kyzy'){
//这里不能得到,其实在上面if判断中就已经得不到$s了
throw new SoapFault('auth', $s);
}
return 'Hi';
}
echo $client->say();
} catch (Exception $e) {
echo $e->getMessage();
}
--------------------------------------------------------
所谓soap,就是普通http post,只不过请求头,和请求body有些差异.
只要你设置了soapheader,那么一个具体的soap请求就会拼接上soapheader,换句话说,say是soapserver自动会触发到的验证函数.
--------------------
say不是一个可以请求的方法
===============================
function say($s){
//【1】
if($s != 'kyzy'){//【2】
throw new SoapFault('[User invaild:'.$s.']', 'access deny!');
}
}function talk(){
return "hello world";
}
$server = new SoapServer(null, array('uri' => 'http://localhost'));
$server->addFunction('say');
$server->addFunction('talk');
$server->handle();client:
==================================
$client = new SoapClient(null, array('uri' => 'http://localhost', 'location' => 'http://localhost/soap/soapserver3.php', 'trace' => true));
//$data = array('username' => 'kyzy');
$data = 'kyzy';
$header = new SoapHeader('http://localhost', 'say', $data, false,SOAP_ACTOR_NEXT);$client->__setSoapHeaders(array($header));try {
//echo $client->say();
echo $client->talk();
} catch (Exception $e) {
echo "Your soap request were :<br/>".htmlspecialchars($client->__getLastRequest());
echo "<br/>===============<br/>";
echo "Your soap response were:<br/>".htmlspecialchars($client->__getLastResponse());
}
//这里有$s
if($s == ''){//这里却没了,就连if中都没法用,无论是$s亦或者是!$s都不成立
throw new SoapFault('safd', 'zhe shi wsm ne');
}
return 'Hi';
}
整个http请求头以及body类似以下:
#http请求头
Post:/s.php Http/1.1
Content-length:xxx
Connection:close#http请求body
<soap:Envelope>
<soap:Header>
<!--这里带上say,soap server就知道要先执行say方法进行验证-->
</soap:Header>
<soap:Body>
<!--这里带上talk,这个才是soap客户端可以$soap->call的方法-->
</soap:Body>
</soap:Envelope>