Исключение BufferNotEmpty из PHPZip

Я получил это исключение, но других полезных подробностей нет. Я использую mpdf6.1.0 и PHPZip2.0.8. Мой код, как показано ниже.

$zip = new Zip();
$mpdf = null;
foreach ($htmlArr as $name=>$html) {
if ($mpdf === null) {
$mpdf = initializePdf();
}
$mpdf->WriteHTML($html);
$zip->addFile($mpdf->Output('', 'S'), $name, microtime());
$mpdf = null;
}
$zip->sendZip('test.zip', "application/zip", 'test.zip');

Функция initializePdf выглядит так, как показано ниже.

function initializePdf() {
$mpdf = new mPDF('CJK', 'A4', '12px', '', 10, 10, 5, 5);
$mpdf->useAdobeCJK = true;
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->autoMarginPadding = 1;
$mpdf->cropMarkLength = 0;
$mpdf->autoPageBreak = true;

return $mpdf;
}

HtmlArr отлично подходит. Я проверял это несколько раз. И я могу вывести PDF-файл в строке $ zip-> addFile. Но когда я перехожу на выходной поток в zip-файле. Возникает исключение BufferNotEmpty. Пожалуйста, помогите мне.
Я использую CakePHP3.2.3. Он прекрасно работает, когда я изолирую код в простой файл php. Но я не знаю, почему я получаю исключение. И страница отладки показывает мне сообщение, как это

Unable to send 'test.zip'. Output buffer contains the following text (typically warning or errors):

0

Решение

Я обнаружил, что в буфере вывода есть один пробел. Вот почему сообщение об ошибке выглядит так странно. PHPZip выбрал остановку, поскольку обнаружил, что буфер не пуст. Я поставил одну строку перед sendZip для очистки буфера вывода, как показано ниже.

$zip = new Zip();
$mpdf = null;
foreach ($htmlArr as $name=>$html) {
if ($mpdf === null) {
$mpdf = initializePdf();
}
$mpdf->WriteHTML($html);
$zip->addFile($mpdf->Output('', 'S'), $name, microtime());
$mpdf = null;
}
// clean buffer
ob_clean();
// send zip stream to browser
$zip->sendZip('test.zip', "application/zip", 'test.zip');
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]