Zend Soap WSDL生成 - Windows权限错误

时间:2015-10-20 17:05:55

标签: php zend-framework wsdl

我正在尝试使用以下PHP代码为运行的Soap Web服务生成WSDL(代码在Windows 7上的Xampp中运行):

<?php
include('Zend/Soap/AutoDiscover');
$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->setClass('MyService')
             ->setUri('http://localhost/Public_Web_Service')
             ->setLocation('http://localhost/Public_Web_Service/server.php')
             ->setServiceName('MyService');
$wsdl = $autodiscover->generate();
$wsdl->dump("C:/xampp/htdocs/file.wsdl");
?>

但是,当我运行代码时,我遇到以下错误消息:

警告:include(C:\ xampp \ php \ pear \ Zend \ Soap \ AutoDiscover):无法打开流:第2行的C:\ xampp \ htdocs \ Public_Web_Service \ zend-wsdl.php中的权限被拒绝

警告:include():在C中打开'Zend / Soap / AutoDiscover'以包含(include_path ='.; C:\ xampp \ php \ PEAR; c:\ xampp \ php \ PEAR \ Zend')失败:第2行\ xampp \ htdocs \ Public_Web_Service \ zend-wsdl.php

致命错误:第3行的C:\ xampp \ htdocs \ Public_Web_Service \ zend-wsdl.php中找不到类'Zend_Soap_AutoDiscover'

我是Zend的新手,我主要关注用PHP创建Soap Web服务。

非常感谢任何帮助。

谢谢,

John Cleaver

1 个答案:

答案 0 :(得分:0)

变化:

include('Zend/Soap/AutoDiscover");

要:

include('Zend/Soap/AutoDiscover.php");

include()在服务器上查找物理文件 - 因此文件部分需要反映确切的文件名。

你正在使用它看起来像Zend Framework 1。在您的应用程序中,您可以在引导程序(启动)脚本中使用类似的内容:

function myAutoload($className)
{
    $classArray = explode("_", $className);

    foreach ($classArray as $key => $value) {
        $classArray[$key] = ucfirst($value);
    }

    $className  = implode('/', $classArray);
    require_once($className . ".php");
}

spl_autoload_register("myAutoload");

然后你永远不需要包含()任何东西 - 它只是自动加载。但请注意,这是传统功能。 Zend Framework 2以及其他现代框架不会出于某种原因使用此功能。我仍然是Zend Framework 1的忠实粉丝,因为它具有用户友好性 - 这是大多数现代框架所缺乏的。如果您想继续使用Zend Framework 1,上面的代码片段可以为您节省大量时间。