Ошибка сегментации в PHP, при использовании SOAP для подключения к SalesForce - PullRequest
3 голосов
/ 19 февраля 2011

Я интегрирую свое программное обеспечение (PHP) с SalesForce, используя SalesForce PHP Toolkit.

Пока все отлично работает, но когда я начал писать код для вызова convertLead (), я получил ошибку «Ошибка сегментации».

Это код, который я выполняю:

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 вместо ключевого массива, тоже самое.Метод convertLead в инструментарии SF очень прост, он просто вызывает тот же метод в экземпляре 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.

Есть идеи, как мне диагностировать (или, что более важно, обойти) эту проблему?

Спасибо!
Даниил

Ответы [ 2 ]

3 голосов
/ 10 марта 2015

В расширении мыла PHP есть ошибка (все еще после 4 лет). Это связано с тем, как он обрабатывает WSDL-кэширование. Отключение кэширования с ini_set() не работает. Вам также нужно отключить кэширование для вашего конкретного экземпляра клиента.

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

Это верно даже при использовании собственного класса PHP SoapClient.

2 голосов
/ 19 февраля 2011

Хорошо, это не решает основную проблему, но, если у кого-то возникла такая же проблема с SalesForce и PHP ...

Несмотря на то, что из документации следует, поля SendNotificationEmail и OverwriteLeadSource ОБЯЗАТЕЛЬНЫ, выНЕОБХОДИМО указать их в вызове.

Если вы этого не сделаете, вы получите приятную ошибку, не SegFault, но все же, которая решает ее.

...