【问题标题】:Using NuSoap works on local machine but not server使用 NuSoap 可以在本地机器上工作,但不能在服务器上工作
【发布时间】: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 内容或网关超时。这可能会告诉您出了什么问题。

标签: php nusoap


【解决方案1】:

如果您没有排除故障的想法,并且假设您在 Linux 上运行,您可以使用 strace 来观察系统调用。这些调用可能看起来很神秘,但有时你可以看到它挂起的系统调用,然后谷歌调用了更多信息。

strace -p processid

或者,如果您想从执行开始跟踪脚本到完成并转储到输出文件:

strace -o trace.txt myscript.php

Here is a good strace tutorial.

【讨论】:

    【解决方案2】:

    你能确保 www-data 有(权限)访问

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

    或者你可以尝试将nusoap复制到另一个目录吗?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2010-11-17
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多