我正在对我的 PHP Web 服务书进行更新,并且 PHP 7 可能会在该书付印之前发布,我正在测试我在 PHP 5.6 和 PHP 7 上的所有示例代码......今天给了我一个非常非常简单的 SOAP 示例的奇怪问题。
<?php
$client = new SoapClient('http://api.radioreference.com/soap2/?wsdl&v=latest');
$countries = $client->getCountryList();
print_r($countries);
这个例子在 PHP 5 上运行良好,但是当我在 PHP 7 上运行它时(在意识到我需要使用
--enable-soap
重新编译之后),我得到了这个错误:
<?php
$client = new SoapClient('http://api.radioreference.com/soap2/?wsdl&v=latest');
$countries = $client->getCountryList();
print_r($countries);
唔。所以我在 IRC 上抱怨它,其他人在 7 上尝试它并说它工作正常(感谢 @akrabat )但它在 5.6 下对他不起作用。
我只能推测版本之间发生了什么变化,这可能是一件好事,不管它是什么,但似乎一旦 WSDL 从一个版本的 PHP 本地缓存,它对另一个版本就没有意义了。要修复它,请禁用 WSDL 缓存:
<?php
$client = new SoapClient('http://api.radioreference.com/soap2/?wsdl&v=latest');
$countries = $client->getCountryList();
print_r($countries);
这对我有用,我不确定我怎么会在 PHP 版本之间发现一个奇怪的 SOAP 错误,而不是通过其他人的幸运帮助,所以它在这里希望它也能为其他人节省时间!