从webservice nusoap接收pdf内容时出现奇怪的行为

8
我创建了一个函数,用于调用网页服务获取pdf文件内容。这个网页服务很好用。
我猜想当文件太大时会出问题。
在另一个服务器上,我修复了相同的问题,该服务器遇到了内存限制错误,他的php版本是5.4。Nusoap的版本是0.9.5,我通过composer来使用它。
这个bundle来源于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将返回false,但如果文件小于6-8M,则没有问题。
因此,我可以说,该网络服务在文件大小小于6-8M时运行良好。
对于为什么我没有得到答案,有什么想法吗?
我尝试将同一PDF从9M缩小到6M进行测试,并且工作正常,所以这一定与文件大小有关。在我的情况下,似乎在7-9M处开始出现问题。

这听起来好像是 SOAP 服务提供商有一些文件大小限制 - 你有跟他们确认过吗? - Honk der Hase
我会检查一下,但如果是这个问题,当我使用print_r函数时,我不会收到所有的pdf内容,直到EOF。这太奇怪了。 - Ricard Espinàs Llovet
点击这里,看看是否能对您有帮助。 - wordragon
我正在使用来自Composer的一个bundle,我不想覆盖这个bundle,以便将来可以通过Composer轻松更新,但还是谢谢你。 - Ricard Espinàs Llovet
2个回答

0
$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

我不确定,但可能与PHP中允许的内存大小有关。尝试增加并测试它。您可以从php.ini.htaccess(不建议)进行编辑。

php.ini示例:

memory_limit = 256M

.htaccess 示例:

php_value memory_limit 256M

附言:您可以更改256,以满足您所需的内存。


似乎这不是问题所在。我在apache2和cli的php.ini中设置了1024M。但无论如何,pdf文件大小约为9M。我甚至尝试增加更大的数字和"-1"来限制内存。但什么也没发生。看起来这不是我需要的答案。 - Ricard Espinàs Llovet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接