2011-10-11 96 views
9

我开发了一些代码,它使用PHP的NuSoap类来调用soap web服务。我使用NuSoap而不是PHP 5本地类,主要是因为我不想在共享Web服务器上安装此代码时添加额外的先决条件。该代码工作正常,我的机器上:使用NuSoap在本地机器上工作,但不在服务器上

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调用没有任何影响,但它仍然不起作用。

任何想法,为什么这可能会发生将不胜感激。

+0

最有可能的memory_limit设置在本地主机和服务器上不同,并且服务器耗尽内存。 –

+0

感谢您的建议。我已经将内存限制提高到了96M,但是这只有在我还调用$ client-> setGlobalDebugLevel(0)时才有效。即使调试关闭,64M也不够。我刚刚检查过,Web服务正在响应~2MB的数据。在这种情况下,内存使用率如此之高似乎很奇怪。 – Johnvb

+0

我也遇到类似的问题。我有一个web服务的5MB数据响应,nuSOAP想占用超过256mb的内存来处理。 – Travis

回答

0

你能确保WWW的数据有(权限)访问

DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ? 

或者你可以尝试的NuSOAP复制到另一个目录?

或者你可以尝试以root用户身份从命令提示符运行它吗?

顺便说一句,你得到了什么样的错误/警告?

2

如果您没有排除故障的想法,并且假设您在Linux上运行,则可以使用strace来查看系统调用。这些电话可能看起来很神秘,但有时你可以看到系统称之为挂机,然后Google呼叫更多信息。

strace -p processid 

或者,如果你想跟踪你的脚本执行的开始到结束,并转储到输出文件:

strace -o trace.txt myscript.php 

Here is a good strace tutorial

相关问题