【发布时间】:2011-11-10 20:34:20
【问题描述】:
我已经开发了一些代码,它使用 PHP 的 NuSoap 类来调用一个肥皂网络服务。我使用 NuSoap 而不是 PHP 5 本机类,主要是因为当此代码安装在共享 Web 服务器上时,我不想添加额外的先决条件。该代码在我的机器上运行良好:
require DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php';
$client = new nusoap_client('http://www.nbnws.net/ws_3_5/GatewayWebService?wsdl', true);
$query1 = '<TaxonReportingCategoryListRequest xmlns="http://www.nbnws.net/TaxonReportingCategory" registrationKey="'.$key.'"></TaxonReportingCategoryListRequest>';
$response = $client->call('GetTaxonReportingCategoryList', $query1);
当我把它放在虚拟服务器上而不是在本地运行时,最后一行只挂了大约 10 秒,然后 PHP 就崩溃了。没有引发异常,也没有 PHP 错误(我尝试使用 try..catch 和 set_error_handler 来确定)。
我的第一反应是,这可能是服务器上运行的防火墙阻止了传出请求,但我在其他地方成功地使用 cUrl 处理请求,我很确定这里没有运行防火墙。虽然调用 $client->use_curl 对 NuSoap 调用没有任何影响,但它仍然不起作用。
任何可能发生这种情况的想法将不胜感激。
【问题讨论】:
-
本地主机和服务器上的memory_limit设置很可能不同,服务器耗尽内存。
-
感谢您的建议。我已将内存限制提高到 96M,但这仅在我还调用 $client->setGlobalDebugLevel(0) 时才有效。即使关闭调试,64M 也不够。我刚刚检查过,Web 服务正在响应大约 2MB 的数据。在这种情况下,内存使用率如此之高似乎很奇怪。
-
我也遇到了类似的问题。我有一个来自 web 服务的 5mb 数据响应,nuSOAP 希望占用超过 256mb 的内存来处理。
-
我也遇到过类似的问题,放弃了生产服务器,试试这个
-
尝试从本地机器和虚拟机访问浏览器上的 url 到 wsdl 文件。您是否获得 wsdl 内容或网关超时。这可能会告诉您出了什么问题。