我已經在PHP(使用SOAP協議)中創建Web服務(客戶端),該服務爲需要接收消息的用戶下載ID的列表。從PHP Web服務創建的壓縮zip文件中提取xml文件時出錯
現在他們已經改變了傳遞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;
}
}
?>
當我嘗試提取壓縮文件的內容時發生問題。由於此功能,我得到錯誤19(不是zip存檔) $res=$zip->open($zip_file);
。 手動解壓縮文件也是一樣
除了用7-zip解壓縮之外,我沒有錯誤。