【发布时间】:2011-02-27 21:38:06
【问题描述】:
我正在尝试通过传递托管在我的本地计算机、我的开发环境上的 url 来创建一个肥皂客户端,但我不断收到此错误。我以前可以打这个电话,而且效果很好。
基本上我所做的就是这个
$client = new SoapClient('http://virtual.website.com:81/api/?wsdl');
如果我在浏览器中访问 url,它就会出现,所以我知道它是正确的位置。在 Magento 论坛上有一些类似的帖子,但我不知道这是 Magento 特有的问题。他们提到的所有我已经拥有的解决方案。他们说要编辑主机文件,例如 127.0.0.1 website.com
我已经有了这个,因为它被设置为虚拟主机。
这是我的 error_log 中的错误
[Fri Jun 04 12:30:37 2010] [error] [client 127.0.0.1] PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://virtual.website.com:81/api/soap/?wsdl' : XML declaration allowed only at the start of the document\n in /usr/local/sites/virtual.website.com/www/CUSTOMSCRIPTS/removeProductImages.php on line 6
[Fri Jun 04 12:30:37 2010] [error] [client 127.0.0.1] PHP Stack trace:
[Fri Jun 04 12:30:37 2010] [error] [client 127.0.0.1] PHP 1. {main}() /usr/local/sites/virtual.website.com/www/CUSTOMSCRIPTS/removeProductImages.php:0
[Fri Jun 04 12:30:37 2010] [error] [client 127.0.0.1] PHP 2. SoapClient->SoapClient(*uninitialized*) /usr/local/sites/virtual.website.com/www/CUSTOMSCRIPTS/removeProductImages.php:6
更新:: 我发现这不是 SOAP 的问题,而是在我的 XML 文件中添加了额外的空格。
【问题讨论】:
-
错误信息不是很详细...你能不能把你的代码 sn-p 放在一个 try/catch 结构中,在那里你会 var_dump 抛出的异常,只是为了看看是否有更多的细节?我不知道这个构造函数fr2.php.net/manual/en/soapfault.soapfault.php中的所有字段是否都在你得到的错误信息中可见。
-
我试过了,但它似乎没有抓住它。我觉得这很奇怪。另一件事。我让我的同事在他们本地机器上的同一个项目上进行了尝试,并且成功了。这让我觉得我的本地机器上发生了一些奇怪的事情。
-
它没有被捕获,因为它是一个致命错误。这是一个错误:看这里bugs.php.net/bug.php?id=34657 但是你的错误消息中有一些有趣的东西:'XML 声明只允许在文档的开头'我认为它之前一定有一些意想不到的东西,尝试使用 wget 和用 vi 查看你的代码,看看这个 XML 声明之前是否有多余的字符。
-
hmm 这样做时会有空格,但这个文件应该与其他同事拥有的任何其他文件相同,并且对他们有用
-
另一件事,代码中的实际 xml 文件,xml 声明在第 1 行,那里可能会增加空间。