【发布时间】:2017-04-08 12:07:41
【问题描述】:
我在 PHP(它使用 SOAP 协议)中创建了 Web 服务(客户端),它为想要接收消息的用户下载 ID 列表。
现在他们已经更改了传递 ID 列表的系统(在服务器端)。他们在 7 个文件中拆分了超过 200000 个 ID 的 xml 列表,并将它们编码为 base64 并压缩为 zip 文件。我已经设法通过我的 PHP 客户端下载每个文件,从 base64 解码它们,然后我创建了 UTF-8 zip 文件并在其中写入了消息的内容,正如您在我的脚本的一部分中看到的那样:
<?php
$obj = array('PinsCcIdsAsXmlZipBase64' => "", 'EmptyPage' => FALSE);
$PageNum=0;
while(!$obj['EmptyPage']){
$obj=Send_SOAP_mssg($TipPoruke,$SERVICE_TEST,$SOAP_cert,$NAMESPACE_URI,$cert_password,$ServiceId,$PageNum,$obj);
$zip_file=$OIB_path . 'PinListOfUsersThatDontHavePersonalization' . $PageNum . '.zip';
$f=fopen($zip_file,"wb")or die("Unable to open file!");
# Now UTF-8 - Add byte order mark
fwrite($f, pack("CCC",0xef,0xbb,0xbf));
fwrite($f,$obj['PinsCcIdsAsXmlZipBase64']);
fclose($f);
$zip = new ZipArchive;
$res = $zip->open($zip_file);
if ($res === TRUE) {
$zip->extractTo("C:\\xampp\\htdocs\\NIAS\\OIB\\");
$zip->close();
echo 'Success!';
} else {
echo 'ERROR! ' . $res ;
}
$PageNum++;
}
function Send_SOAP_mssg($TipPoruke,$SERVICE_TEST,$SOAP_cert,$NAMESPACE_URI,$cert_password,$ServiceId,$PageNum,$obj){
$client->__getLastRequest();
$xml=$client->__getLastResponse();
$doc = new DOMDocument();
$doc->loadXML( $xml );
$SOAPRequest = $doc->getElementsByTagName( "EmptyResultSet" );
if ($SOAPRequest->length!=0){
$obj['EmptyPage'] = TRUE;
return $obj;
}
else{
$SOAPRequest = $doc->getElementsByTagName( "PinsCcIdsAsXmlZipBase64" );
$obj['PinsCcIdsAsXmlZipBase64'] .= base64_decode($SOAPRequest->item(0)->nodeValue);
$obj['EmptyPage'] = FALSE;
return $obj;
}
}
?>
当我尝试提取 zip 文件的内容时出现问题。由于此功能,我收到错误 19(不是 zip 存档)
$res=$zip->open($zip_file);。
手动提取文件也是如此
除了用 7-zip 解压,我没有错误。
【问题讨论】:
标签: php xml web-services soap zip