我开发了一些代码,它使用PHP的NuSoap类来调用soap web服务。我正在使用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-&gt; use_curl对NuSoap调用没有任何影响,但它仍然不起作用。
为什么会出现这种情况的任何想法都将不胜感激。
答案 0 :(得分:2)
如果您没有排除故障,并假设您在Linux上运行,则可以使用strace来监视系统调用。这些电话看起来很神秘,但有时您可以看到它挂在哪个系统上,然后谷歌需要更多信息。
strace -p processid
或者,如果要跟踪脚本从执行开始到完成并转储到输出文件:
strace -o trace.txt myscript.php
答案 1 :(得分:0)
您能否确保www-data拥有(允许)访问
DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ?
或者你可以尝试将nusoap复制到另一个目录吗?
或者您可以尝试以root用户身份从命令提示符运行它吗?
顺便问一下,你得到了什么样的错误/警告?