Segmentation PHP中的错误错误,使用SOAP连接到SalesForce

我正在使用SalesForce PHP工具箱将我的软件(PHP)与SalesForce集成。

到目前为止,一切都很好,但是当我开始编写代码来调用convertLead()时,我得到了一个“Segmentation Fault”错误。

这是我正在运行的代码:

require_once('../salesforce/SforceEnterpriseClient.php');
ini_set('soap.wsdl_cache_enabled', 0);
$SForce = new SforceEnterpriseClient();

$result = $SForce->createConnection('../salesforce/enterprise.wsdl.xml');
$result = $SForce->login('user', 'pass+token');
    echo "Logged In!";
$data = array(
    'convertedStatus' => 'Converted',
    'leadId' => '00QC000000mDcmJMAS'
);
$result = $SForce->convertLead(array($data));

而已。 我正在收到一个分段错误。 我尝试使用StdClass而不是键控数组,同样的事情。 SF工具包中的convertLead方法非常简单,它只是将相同的方法调用到SoapClient实例中。

注:我从CLI运行此脚本,而不是通过Apache。


更新:试图用我的脚本运行“strace”。 它的最后几行是:

close(4)                                = 0
write(1, "Logged IN!", 10Logged IN!)              = 10
open("error_log", O_WRONLY|O_CREAT|O_APPEND, 0644) = 4
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++

另外,如果相关:

php --version
PHP 5.2.13 (cli) (built: Jul 17 2010 22:01:13)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
    with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
    with the ionCube PHP Loader v3.3.20, Copyright (c) 2002-2010, by ionCube Ltd., and
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

这也发生在我的开发机器(Windows)中,所以我怀疑它是加速器或类似的东西:

php --version
PHP 5.2.13 (cli) (built: Feb 24 2010 14:37:44)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

这可能是也可能不是特定于SalesForce。 可能不会,看起来像SOAP PHP库中的一个错误。 也许请求/响应被破坏,但我看不到这些,因为它们是HTTPS。

任何想法我可以怎样去诊断(或者更重要的是解决这个问题)?

谢谢!
丹尼尔


在PHP soap扩展中有一个错误(仍然在4年后)。 它与它如何处理WSDL缓存有关。 使用ini_set()禁用缓存不起作用。 您还需要关闭特定客户端实例的缓存。

return new SforceEnterpriseClient('../salesforce/enterprise.wsdl.xml', array(
    'cache_wsdl' => WSDL_CACHE_NONE
));

即使使用本机PHP SoapClient类也是如此。


好吧,这并不能解决潜在的问题,但是,如果有人遇到与SalesForce和PHP相同的问题......

尽管文档暗示,字段SendNotificationEmail和OverwriteLeadSource是强制性的,您必须在通话中指定它们。

不这样做会给你一个很好的错误,而不是SegFault,但仍然可以解决它。

链接地址: http://www.djcxy.com/p/63961.html

上一篇: Segmentation Fault error in PHP, using SOAP to connect to SalesForce

下一篇: child(1):contains('a') work?