我有一些代码通过SOAP连接到时事通讯服务。它在我们的开发服务器上工作没有问题,但在我们的实时服务器上根本不工作。它不会返回任何错误;只是一张空白的白纸。我在代码中放入了一些error_log,并找到了它停止工作的确切位置——在创建新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");
我会检查开发服务器上安装的PHP包,并与Prod服务器进行比较。fr2.php.net/manual/en/soap.setup.php
这很可能是php在实时服务器上的配置设置,但以下是我在php上使用SOAP、时遇到的常见问题
第一件事是检查php在live中与dev相比允许的内存(SOAP很大,对内存不利)
实时服务器上的php与开发服务器的版本相同吗
是否授权实时服务器访问SOAP服务器(如果在IP级别上使用身份验证)
当我使用的一个SOAP包对我这样做时,我发现存在版本不匹配,最后但同样重要的是,你能告诉我们什么SOAP库吗?如果有其他的,那么php默认你使用,这样我们就可以帮助你,因为你的代码看起来很好:)
想想看,如果你安装了soap,我不认为php本身支持它,我认为它是一个pear或pecl包,如果你在dev上使用XAMPP或easyPHP,那么这两者都已包含在php中。