Following code has been creating zip files from PDF files for years in 4 parallel installations on same hardware.
Since a week it does not work anymore for a single system, no code changes.
The download via browser delivers a broken archive, that turns out to be a single, healthy pdf file when you change the file endinge from ".zip" to ".pdf" manually.
It seems like the file is sent before zip creation is ready, since i can download a working copy of the archive via ftp from the creation folder on the servers disc.
I tried to add a sleep(5) before return, commented out the use of PharData but nothing works. Still same problem. Any ideas?
<?php
//use phar class to zip, if existent
if ( class_exists( 'PharData' ) ) {
$a = new PharData( $path );
foreach ( $creditmemo_files as $creditmemo_file ) {
if ( is_string( $creditmemo_file ) ) {
$a->addFile( $creditmemo_file, basename( $creditmemo_file ) );
}
}
}
//otherwise use the usual zip archive class
if ( class_exists( 'ZipArchive' ) ) {
create_zip( $creditmemo_files, $path );
}
if ( file_exists( $path ) === true ) {
// http headers for zip downloads
header( "Pragma: public" );
header( "Expires: 0" );
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header( "Cache-Control: public" );
header( "Content-Description: File Transfer" );
header( "Content-Type: application/zip" );
header( "Content-Disposition: attachment; filename=\"" . $filename . "\"" );
header( "Content-Transfer-Encoding: binary" );
header( "Content-Length: " . filesize( $path ) );
$bytes_read = readfile( $path );
ob_end_flush();
}