2

我有一些通过 SOAP 连接到时事通讯服务的代码。它在我们的开发服务器上没有问题,但在我们的实时服务器上它根本不起作用。它没有返回任何错误;只是一个空白的白页。我已经在代码中放入了一些 error_logs,并准确地找到了它停止工作的位置——在创建新的 SoapClient 的那一行。是否需要设置某种服务器配置?我们的代码在 dev 和 prod 之间是相同的,所以我唯一能想到的是服务器问题。(请注意,下面的第一段代码是由时事通讯服务提供的,不是我写的。)

# bronto API session/connection setup
ini_set("soap.wsdl_cache_enabled", "0");
date_default_timezone_set('America/Chicago');

$wsdl = "https://api.bronto.com/v4?wsdl";
$url = "https://api.bronto.com/v4";

/*error log statements up to this point return what is expected; 
  an error log after the following line (starting with $client = new SoapClient) 
  does not get triggered at all. */

$client = new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8')); 
$client->__setLocation($url);

$token = "XXX";
$sessionId = $client->login(array("apiToken" => $token))->return;
$client->__setSoapHeaders(array(new SoapHeader("http://api.bronto.com/v4",
        'sessionHeader',
         array('sessionId' => $sessionId))));

我也尝试过类似的方法来明确查看任何错误,但没有运气 - 错误日志中仍然没有任何内容。

try {  
  $client = @new SoapClient($wsdl, array('trace' => 1, 'encoding' => 'UTF-8')); 
} 
  catch (SoapFault $E) {  
    error_log($E->faultstring) ;
}  
error_log("ok"); 
4

2 回答 2

7

我会检查开发服务器上安装的 PHP 包并与 Prod 服务器进行比较。fr2.php.net/manual/en/soap.setup.php

于 2011-05-27T15:52:05.530 回答
0

这很可能是实时服务器上 php 的配置设置,但这是我在 php 上使用 SOAP 时遇到的常见问题,

首先是在与 dev 相当的情况下检查 php 的允许内存(SOAP 对内存来说很大而且不好)

实时服务器上的php与开发服务器的版本是否相同,

实时服务器是否被授权访问 SOAP 服务器(如果在 IP 级别上使用 auth)

作为我使用过的 SOAP 包之一,我发现存在版本不匹配,最后但并非最不重要的一点是,您能否告诉我们 SOAP 库(如果您使用的是 php 默认值),以便我们可以提供帮助,因为您的代码看起来不错:)

考虑一下您是否安装了soap 我不认为php 本身支持它我认为它是pear 或pecl 包,如果您在开发人员上使用XAMPP 或easyPHP,这些都已包含在php 中。

于 2011-05-27T15:53:25.797 回答