Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web服务-PHP Zend(空白页-无错误)_Php_Web Services_Zend Framework_Soap_Wsdl - Fatal编程技术网

Web服务-PHP Zend(空白页-无错误)

Web服务-PHP Zend(空白页-无错误),php,web-services,zend-framework,soap,wsdl,Php,Web Services,Zend Framework,Soap,Wsdl,我制作了一个简单的代码版本。它没有错误,但根本不起作用。 我已经为PHP启用了Soap 使用函数:Metodo.php初始化 class Teste { /* * @return string */ function SayHello() { return "Hello, WORLD"; } } 服务器:Server.php <?php require_once('Metodo.php'); if($_SERVER['QU

我制作了一个简单的代码版本。它没有错误,但根本不起作用。 我已经为PHP启用了Soap

使用函数:Metodo.php初始化

class Teste {


    /*
    * @return string
    */
    function SayHello() {
        return "Hello, WORLD";
    }

}
服务器:Server.php

<?php

require_once('Metodo.php');

if($_SERVER['QUERY_STRING'] == "wsdl") {

    try {

        require_once('Zend/Soap/AutoDiscover.php');
        $wsdl = new Zend_Soap_AutoDiscover();
        $wsdl->setClass('Teste');
        $wsdl->handle();

    }catch(exception $e) {
        echo $e->getMessage();
    }

} else {

    $wsdl_url = sprintf('http://%s%s?wsdl', $_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']);

    require_once('Zend/Soap/Server.php');
    $server = new SoapServer($wsdl_url);
    $server->setClass('Teste');
    $server->handle();

}

?>
客户端:Client.php

<?php

    require_once('Zend/Soap/Client.php');
    $wsdl_url = "http://localhost:8090/WebService/Server.php?wsdl";
    $client = new Zend_Soap_Client($wsdl_url);

    try {
        echo $client->SayHello();
        echo ":)";
    } catch (SoapFault $e) {
        echo $e->getMessage();
    }

    ?>
它只打印:,没有错误,但不会调用方法SayHello。 如果有人能帮助我,我将非常感激。真正地
非常感谢。

应该在某个地方记录错误。检查服务器和PHP日志。SOAP客户端还有一些“跟踪/调试”设置。启用这些选项后,您可能会从上次呼叫/响应中获得更多信息

如果没有更多信息,以下是一些观察结果:

非标准函数名。在采埃孚,这种情况是正常的。 非标准端口,不确定原因,但可能相关 您是否尝试过使用浏览器访问WSDL?它解决了吗

freenodes的zftalk频道IRC也是一个很好的资源。如果你在这里找到答案,请发回这里。

有几件事:

$server = new SoapServer($wsdl_url);
应该是:

$server = new Zend_Soap_Server($wsdl_url);
/**
* @return string
*/
function SayHello() {
    return "Hello, WORLD";
}
它可能不需要,但由于之前在Zend Soap服务器类中需要,所以您也可以使用它

在Server.php中:

$wsdl_url = sprintf('http://%s%s?wsdl', $_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']);
确保此URL在使用端口8090时包含正确的端口。我记不清HTTP_主机是否运行了

最重要的是,在你的课堂上:

/*
* @return string
*/
function SayHello() {
    return "Hello, WORLD";
}
应该是:

$server = new Zend_Soap_Server($wsdl_url);
/**
* @return string
*/
function SayHello() {
    return "Hello, WORLD";
}
注意注释开头的额外*号。自动发现类使用PHPDoc块工作,PHPDoc块必须以/**开头才能有效。容易错过


如果在这些更改之后仍然无法工作,请绝对确保PHP没有缓存坏的WSDL文件默认情况下PHP缓存WSDL文件。最简单的方法是从系统上的/tmp/文件夹或等效文件夹中删除以“wsdl”开头的任何文件。在做了这些更改之后,我使用您的代码得到了正确的输出。

您希望得到什么输出?输出:Hello,WORLD!:您是否打开了错误检查和输出?我刚刚更改了一些随机代码以进行检查。是的,我知道。额外的*成功了。我爱你。为了工作,我还必须从localhost:8090更改为127.0.0.1:8090。