所以我有一个应用程序运行的多个实例,一个用于2008,2009,2010 ... 2012.所有这些都有一个功能,您可以下载一堆数据的.XLS报告。出于某种原因,通过应用程序下载时,XLS文件正在被破坏。你可以将pdf移动到webroot,下载它,它会打开就好了,但当你试图通过download.php?file=29320f9je
下载它时,Excel表示它没有识别文件' s格式,并喷出垃圾(我们的数据应该是什么,只是在unicode垃圾中)
除了应用程序和标题之外,还有其他任何人遇到此问题并提出其他建议吗?因为2010年和2012年之间的代码应该没问题。
用户生成报告。可以通过上述方法正确查看。实际方法如下:
用户点击链接到"下载文件" (report.retrieve.download.htm?file=2390jsf
)
report.retrieve.download.htm
$file = $_GET['file'];
$tempfile = new tempfile(''); // open tempfile class, argument is name of report
if ($tempfile->set_filename($file) === false)
$tempfile->error_report('4026','',"Filename: $file",'Y');
if ($tempfile->send_file() === false)
$tempfile->error_report('4027','',"Filename: $file",'Y');
相关功能
public function send_file() {
$file = $this->get_full_filename();
if (file_exists($file)===FALSE)
return FALSE;
if ($this->send_headers($file)===FALSE)
return FALSE;
$this->output_file($file);
return TRUE;
}
并且所有重要的标题都起作用..
public function send_headers($filename) {
if (headers_sent()===TRUE)
return FALSE;
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT'])) {
// IE Bug in download name workaround
ini_set( 'zlib.output_compression','Off' );
}
/*
$fInfo = new finfo(FILEINFO_MIME);
$type = $fInfo->file($filename);
$stats = stat($filename);
$size = $stats['size'];
*/
$output_filename = $this->get_output_filename();
if (eregi('csv$', $this->get_output_filename())) {
header("Content-type: text/csv");
//header("Content-Size: $size");
header("Pragma: public");
header("Content-Disposition: attachment; filename=$output_filename");
}
elseif (eregi('htm$', $this->get_output_filename()))
header("Content-type: text/html");
else {
header("Content-type: application/vnd.ms-excel");
//header("Content-Size: $size");
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment; filename=$output_filename");
}
return TRUE;
}
答案 0 :(得分:0)
另一个文件有一个尾随换行符;一个包括一个包含的。我没有写这个应用程序,但是那些选择使用关闭PHP标记(?>)并最终得到其中一个愚蠢错误的人。
zipp@zeratul htdocs]# echo '<?php foreach (glob("*.php") as $file){if (preg_match( "/\\?".">\\s\\s+\\Z/m", file_get_contents($file))) echo("$file\n");} ?>' | php
config.class.php