Использование NuSoap работает на локальной машине, но не на сервере - PullRequest
9 голосов
/ 11 октября 2011

Я разработал некоторый код, который использует классы NuSoap для PHP для вызова мыльного веб-сервиса.Я использую NuSoap, а не родные классы PHP 5, главным образом потому, что не хочу добавлять дополнительные предварительные условия, когда этот код установлен на общем веб-сервере.Код отлично работает на моей машине:

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, но все равно не работает.

Любые идеи, почему это может происходить, будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Если у вас нет идей по устранению неполадок и предполагается, что вы работаете в Linux, вы можете наблюдать за системными вызовами с помощью strace. Звонки могут показаться довольно загадочными, но иногда вы можете увидеть, какая система вызывает их зависание, а затем Google, для получения дополнительной информации.

strace -p processid

Или, если вы хотите отследить ваш скрипт от начала выполнения до конца и вывести его в выходной файл:

strace -o trace.txt myscript.php

Вот хороший урок по стрису .

0 голосов
/ 03 ноября 2011

Можете ли вы убедиться, что www-данные имеют (разрешение) доступ к

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

Или вы можете попробовать скопировать nusoap в другой каталог?

Или вы можете попробовать запустить его из командной строки от имени пользователя root?

Кстати, какие у вас ошибки / предупреждения?

...