Странное поведение при получении pdf-контента от веб-сервиса nusoap - PullRequest
0 голосов
/ 19 сентября 2018

Я создал функцию, которая вызывает веб-сервис для содержимого файла PDF.Веб-служба работает хорошо.

Я думаю, проблема возникает, когда файл слишком велик.

Я мог бы исправить эту же проблему на другом сервере, у которого была такая же ошибка, сгенерировать memory_limit и его версию phpэто 5.4.Версия Nusoap - 0.9.5, и я использую ее через комплект от композитора.

Этот комплект от https://packagist.org/packages/econea/nusoap, и я использую v0.9.6.

Всервер, который я не могу исправить ошибку, я использую php 7.0.Версия Nusoap на этом сервере - 0.9.5.

/**
 * @param string $docId
 * @return string
 */
public function getDocumentFromDocId(string $docId)
{
    $client = new \nusoap_client('http://'.$this->ip.'/arcdoc/WebServiceServer.php?wsdl', true);
    $response = $client->call('GetDoc', array(
        'xxxx1' => 'xxxxxx',
        'xxxx2' => base64_encode('xxxxx'),
        'xxxx3' => base64_encode("yyyyyyy"),
        'xxxx4' => base64_encode($docId)
    ));
    var_dump($response);
    return $response;
}

Когда я var_dump(), ответ на этот ответ:

/var/www/html/project/src/AppBundle/Service/whatever.php:55:boolean false

Если файл больше 6-8M будет ложным $response, но если файл меньше 6-8M, это не проблема.

Итак, я могу сказать, что веб-сервис хорошо работает с файлами меньшего размера, чем 6-8M.

Есть идеи о том, почему я не получаю ответ?

Я тестировал, чтобы уменьшить тот же самый pdf с 9M до 6M и работает хорошо, так что это должно быть что-то оразмер файла.В моем случае начинает плохо работать 7-9M.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018
$paramWSDLS = array(
    'soap_version' => SOAP_1_1,
    'encoding' => 'ISO-8859-15',
    'cache_wsdl' => WSDL_CACHE_NONE,
    'exceptions' => false,
    'trace' => true,
    'style' => SOAP_DOCUMENT,
    'use' => SOAP_LITERAL
);
$wsclient = new SoapClient('http://'.$this->ip.'/arcdoc/WebServiceServer.php?wsdl', $paramWSDLS );
$parametros = array(
   'xxxx' => 'xxxxxx',
   'xxxx2' => base64_encode('xxxxx2'),
   'xxxx3' => utf8_decode('xxxxx3'),
   'xxxx4' => utf8_decode('xxxxx4'),
   'showMask' => false
);
$response = $wsclient->__soapCall('GetDoc', $parametros );

Не знаю почему, но использование этого SoapClient решило эту проблему.

0 голосов
/ 19 сентября 2018

Я не уверен, но это может быть связано с разрешенным объемом памяти в PHP.Просто попробуйте увеличить и проверить это.Вы можете редактировать его из php.ini или из .htaccess (не рекомендуется).

php.ini пример:

memory_limit = 256M

.htaccess пример:

php_value memory_limit 256M

PS Вы можете изменить 256 любую нужную память.

...