我试图让我的网页获取存储在服务器上的.csv文件并强制下载它。我已经尝试了几种不同的方法来实现这一点,并且遇到了这样的问题:当它以chrome格式保存时,它会毫无问题地下载.csv但在safari中会打开文件而不是保存它。
我尝试根据我之前看到的答案
这样做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);
}
所以在这个文件结束时,我只想直接下载,但实际上并没有发生任何事情。
这是否有原因。
答案 0 :(得分:1)
我不确切知道发生了什么,请尝试下面的代码:
<?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);
?>