使用php强制下载.csv文件

使用php强制下载.csv文件,php,csv,Php,Csv,我试图让我的网页获取存储在服务器上的.csv文件并强制下载。我尝试了几种不同的方法来实现这一点,我遇到了一个问题,当它在chrome中保存时,它会下载.csv而不会出现问题,但在safari中,它会打开文件而不是保存它 我根据之前看到的答案试着这么做 header('Content-Type: application/csv'); header("Content-disposition: attachment; filename='".$username.'-LMSearch'.'.csv'."

我试图让我的网页获取存储在服务器上的.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);
}
$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);
?>

您可能需要查看此帖子: