2014-10-18 13 views
6

Hệ thống của tôi tạo ra một thư mục với các tập tin và thư mục con tiếp theoTạo tập tin ODT sử dụng Zip php lỗi chung đầu vào/đầu ra

enter image description here

Tôi đang sử dụng this code để tạo ra một tập tin odt. Khi tôi chạy hệ thống của tôi bằng cách sử dụng mã này để nén các thư mục con và tệp thành tệp test.odt trên Apache + PHP và Ubuntu 12.04, tệp odt là ok. Nhưng khi tôi cố gắng để zip vào một tập tin test.odt trên IIS + PHP và Windows tập tin odt không hoạt động. Tôi biết không làm việc bởi vì khi tôi mở tập tin odt với LibreOffice tôi nhận được lỗi đầu vào/đầu ra lỗi chung.Here tệp odt.

Khi tôi giải nén tệp odt được tạo ra trên Windows, các thư mục và tệp có cùng hình dạng của hình ảnh. Tôi đang tìm kiếm trong google và có thể vấn đề là mã hóa mimetype.

Làm cách nào để tôi có thể sửa đổi mã 1 để tôi khắc phục sự cố của mình?

EDIT

tôi sử dụng this folder với mã dưới đây nhưng tôi chỉ nhận được "PKÜNTEBasic/PKÜNTEú ミ, Lor/Basic/script-lc.xmle マ AoÂ0" trong file odt của tôi. Here the example.

<?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 
?> 
+2

Vui lòng thêm lỗi đã nhận và liên kết tải xuống tệp ODT bị ảnh hưởng. Cảm ơn bạn. – dotancohen

+0

Tôi đã chỉnh sửa câu hỏi của mình với các đề xuất của bạn. – Juan

+0

Tôi sử dụng PClZIP và Q5 của http://www.phpconcept.net/pclzip/faq và kịch bản của tôi hoạt động ngay bây giờ! – Juan

Trả lời

Các vấn đề liên quan