Cree un archivo ODT usando el error general de entrada / salida Zip php

Mi sistema genera una carpeta con los siguientes archivos y subcarpetas

Estoy usandoeste codigo para crear un archivo impar. Cuando ejecuto mi sistema usando este código para comprimir esas subcarpetas y archivos en el archivo test.odt sobre Apache + PHP y Ubuntu 12.04, el archivo odt está bien. Pero cuando intento comprimir uno en el archivo test.odt sobre IIS + PHP y Windows, el archivo odt no funciona. Sé que no funciona porque cuando abro el archivo impar con LibreOfficeMe sale el error de entrada / salida error general. aquí El archivo impar.

Cuando extraigo el archivo impar generado en Windows, las carpetas y los archivos tienen la misma forma de la imagen. Estoy buscando en google y tal vez el problema es una codificación de tipo mime.

Cómo podré modificar el código1 tal que me arreglen mi problema?

EDITAR

yo sueloesta carpeta con el código a continuación, pero solo obtengo "PKÜNTEBasic / PKÜNTEú ミ‚ lÓR / Basic / script-lc.xmle マ AoÂ0 "en mi archivo impar.Aquí el ejemplo.

<?php

$wordtemplatedownloadpath = "siscons\\test\\wordtemplatedownload\\";
Zip($wordtemplatedownloadpath . "pasta3", $wordtemplatedownloadpath . "test.odt");
force_download("test.odt", $wordtemplatedownloadpath . "test.odt");
//echo "<a href=test/wordtemplatedownload/test.odt>" . "Download Force". "</a>";
function Zip($source, $destination)
{
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }

    $source = str_replace('\\', '/', realpath($source));
    //echo $source;
    if (is_dir($source) === true) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file) {
            //print "file#".$file."\n";
            $file = str_replace('\\', '/', $file);

            // Ignore "." and ".." folders
            if (in_array(substr($file, strrpos($file, '/') + 1), array('.', '..')))
                continue;

            //$file = realpath($file);
            //print "file#".$file."\n";
            if (is_dir($file) === true) {
                //$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
                //echo "sourcE".$source."FilE".$file."ReplacE".str_replace($source . '/', '', $file)."End";
                $zip->addEmptyDir(str_replace($source . '/', '', $file));
            } else if (is_file($file) === true) {

                $str1 = str_replace($source . '/', '', '/' . $file);
                $str1 = str_replace('/', '/', $str1);
                $zip->addFromString($str1, file_get_contents($file));
                //$zip->addFromString("subfolder/styles.xml", file_get_contents($file));

            }
        }
    } else if (is_file($source) === true) {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}

function force_download($filename = '', $data = '')
{
    if ($filename == '' || $data == '') {
        return false;
    }

    if (!file_exists($data)) {
        return false;
    }

    // Try to determine if the filename includes a file extension.
    // We need it in order to set the MIME type
    if (false === strpos($filename, '.')) {
        return false;
    }

    // Grab the file extension
    $extension = strtolower(pathinfo(basename($filename), PATHINFO_EXTENSION));

    // our list of mime types
    $mime_types = array(

        'txt' => 'text/plain',
        'htm' => 'text/html',
        'html' => 'text/html',
        'php' => 'text/html',
        'css' => 'text/css',
        'js' => 'application/javascript',
        'json' => 'application/json',
        'xml' => 'application/xml',
        'swf' => 'application/x-shockwave-flash',
        'flv' => 'video/x-flv',

        // images
        'png' => 'image/png',
        'jpe' => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpeg',
        'gif' => 'image/gif',
        'bmp' => 'image/bmp',
        'ico' => 'image/vnd.microsoft.icon',
        'tiff' => 'image/tiff',
        'tif' => 'image/tiff',
        'svg' => 'image/svg+xml',
        'svgz' => 'image/svg+xml',

        // archives
        'zip' => 'application/zip',
        'rar' => 'application/x-rar-compressed',
        'exe' => 'application/x-msdownload',
        'msi' => 'application/x-msdownload',
        'cab' => 'application/vnd.ms-cab-compressed',

        // audio/video
        'mp3' => 'audio/mpeg',
        'qt' => 'video/quicktime',
        'mov' => 'video/quicktime',
        // adobe
        'pdf' => 'application/pdf',
        'psd' => 'image/vnd.adobe.photoshop',
        'ai' => 'application/postscript',
        'eps' => 'application/postscript',
        'ps' => 'application/postscript',

        // ms office
        'doc' => 'application/msword',
        'rtf' => 'application/rtf',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',

        // open office
        'odt' => 'application/vnd.oasis.opendocument.text',
        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
    );

    // Set a default mime if we can't find it
    if (!isset($mime_types[$extension])) {
        $mime = 'application/octet-stream';
    } else {
        $mime = (is_array($mime_types[$extension])) ? $mime_types[$extension][0] : $mime_types[$extension];
    }

    // Generate the server headers
    if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
        header('Content-Type: "' . $mime . '"');
        header('Content-Disposition: attachment; filename="' . $filename . '"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header("Content-Transfer-Encoding: binary");
        header('Pragma: public');
        header("Content-Length: " . filesize($data));
    } else {
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private", false);
        header("Content-Type: " . $mime, true, 200);
        header('Content-Length: ' . filesize($data));
        header('Content-Disposition: attachment; filename=' . $filename);
        header("Content-Transfer-Encoding: binary");
    }
    readfile($data);
    exit;

} //End force_download
?>

Respuestas a la pregunta(1)

Su respuesta a la pregunta