Webkit和Excel文件(PHPexcel)

我有一个可以下载的excel文件..例如NAME.xlsx以及它在Firefox中工作,但在WebKit(safari / chrome)它追加到名称也扩展名.xhtml所以然后命名它将是NAME.xlsx.html它应该只有.xlsx

在这里你有我的标题:

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save($root.'/application/to_excel/KSW.xlsx'); $this->getResponse()->setHeader('Content-type', 'application/download', true); $this->getResponse()->setHeader('Content-type', 'application/octet-stream', true); $this->getResponse()->setHeader('Content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true); $this->getResponse()->setHeader('Content-disposition', 'attachment;filename='.basename($root.'/application/to_excel/KSW.xlsx').'', true); $this->getResponse()->setHeader('Cache-Control', 'max-age=0', true); 

那么我做错了什么?

我还没有这个function失败 – 它适用于我迄今为止在Safari(Windows)和Chrome上尝试过的所有Office 2007/2010文件。 get_known_mime_types()函数只是返回一个由我的应用程序支持的所有MIMEtypes的巨大数组 – 只是Google为您需要的MIMEtypes。 $file是主机上$file的实际path, $name是在下载(运行/保存)对话框中显示的文件名。 我也从我得到的最多的地方给予应有的赞誉。 希望你也有幸运:

 function file_download($file, $name, $mime_type='') { /* The majority of this code was taken from: * http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/ * * So a big thanks to them. * I have modified parts of it, though, so it's not 100% borrowed. */ if(!is_readable($file)) die('File not found or inaccessible!'); $size = filesize($file); $name = rawurldecode($name); /* Figure out the MIME type (if not specified) */ $known_mime_types = get_known_mime_types(); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($file,"."),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type="application/force-download"; } } @ob_end_clean(); //turn off output buffering to decrease cpu usage // required for IE, otherwise Content-Disposition may be ignored if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); } header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$name.'"'); header("Content-Transfer-Encoding: binary"); header('Accept-Ranges: bytes'); /* The three lines below basically make the download non-cacheable */ header("Cache-control: private"); header('Pragma: private'); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // multipart-download and download resuming support if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } /* output the file itself */ $chunksize = 1*(1024*1024); // 1MB, can be tweaked if needed $bytes_send = 0; if ($file = fopen($file, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) { fseek($file, $range); } while(!feof($file) && (!connection_aborted()) && ($bytes_send<$new_length)) { $buffer = fread($file, $chunksize); print($buffer); //echo($buffer); // is also possible flush(); $bytes_send += strlen($buffer); } fclose($file); } else { die('Error - can not open file.'); } die(); }