使用php强制下载.csv文件
我试图让我的网页获取存储在服务器上的.csv文件并强制下载。我尝试了几种不同的方法来实现这一点,我遇到了一个问题,当它在chrome中保存时,它会下载.csv而不会出现问题,但在safari中,它会打开文件而不是保存它 我根据之前看到的答案试着这么做使用php强制下载.csv文件,php,csv,Php,Csv,我试图让我的网页获取存储在服务器上的.csv文件并强制下载。我尝试了几种不同的方法来实现这一点,我遇到了一个问题,当它在chrome中保存时,它会下载.csv而不会出现问题,但在safari中,它会打开文件而不是保存它 我根据之前看到的答案试着这么做 header('Content-Type: application/csv'); header("Content-disposition: attachment; filename='".$username.'-LMSearch'.'.csv'."
header('Content-Type: application/csv');
header("Content-disposition: attachment; filename='".$username.'-LMSearch'.'.csv'."'");
readfile($filename);
但我没有得到任何进展,到目前为止,我只是将页面重定向到文件位置。有没有关于我哪里出了问题或者为什么下载没有开始的建议
编辑:
所以我尝试了发布的解决方案和与之相关的问题,但问题仍然存在
也许我可以用更多的代码更详细地解释
所以按下保存数据按钮,然后从MySQL数据库中提取数据,并使用PHPExcel将其转换为文件夹中的.csv文件。我知道它工作正常,因为文件存在
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
// Add some data
for ($i = 0;$i < count($dataArray);$i++){
for ($j = 0;$j < count($dataArray[$i]);$j++){
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($j, $i+1)->getNumberFormat()->setFormatCode('0.0000');
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow($j, $i+1, $dataArray[$i][$j]);
$objPHPExcel->getActiveSheet()->getColumnDimension(chr($j+65))->setAutoSize(true);
}
}
$filePath = '../downloadFiles/'.$username;
if (!file_exists($filePath)){mkdir($filePath,0700);}
$filename = $filePath.'/'.$username.'-LMSearch-'.time().'.csv';
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV')->setDelimiter(',')
->setEnclosure('"')
->setLineEnding("\r\n")
->setSheetIndex(0)
->save($filename);
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$username.'-LMSearch-'.time().'.csv'.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($filename));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($filename);
}
$objPHPExcel=new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
//添加一些数据
对于($i=0;$igetActiveSheet()->getStyleByColumnRow($j,$i+1)->getNumberFormat()->setFormatCode('0.0000');
$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnRow($j,$i+1,$dataArray[$i][$j]);
$objPHPExcel->getActiveSheet()->getColumnDimension(chr($j+65))->setAutoSize(true);
}
}
$filePath='../downloadFiles/'.$username;
如果(!file_存在($filePath)){mkdir($filePath,0700);}
$filename=$filePath.'/'.$username.-LMSearch-'.time()..csv';
$objWriter=PHPExcel\u IOFactory::createWriter($objPHPExcel,'CSV')->setDelimiter(','))
->setEnclosure(“”)
->setLineEnding(“\r\n”)
->设置表索引(0)
->保存($filename);
$callEndTime=微时间(真);
$callTime=$callEndTime-$callStartTime;
标题(“内容描述:文件传输”);
标题('Content-Disposition:attachment;filename=“.”.$username.-LMSearch-'.time()..csv'.');
标题(“内容类型:应用程序/八位字节流”);
标题(“内容传输编码:二进制”);
标题('Content-Length:'.filesize($filename));
标头('Cache-Control:必须重新验证,后检查=0,前检查=0');
标题(“Pragma:public”);
标题('Expires:0');
readfile($filename);
}
所以在本文的结尾,一旦文件在那里,我只想直接下载,但实际上什么都没有发生
这是有原因的。我不知道到底发生了什么,请尝试下面的代码,例如:
<?php
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
readfile($file);
?>
您可能需要查看此帖子: