我目前正试图在用户的浏览器中下载文件,但至今无法实现。强制PHP通过浏览器下载文件
我已经在stackoverflow.com上看过其他答案,到目前为止还没有发现任何已经解决了我的问题。
我的过程如下:
我创建的文件名和文件路径,然后套头:
$date = new DateTime();
$currentDateTime = $date->format("Y-m-d H:i:s");
$filename = "{$name}_{$currentDateTime}.csv";
$filepath = $rootfull . "/{$filename}";
// Set headers
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="' . $filepath . '"');
header('Content-Length: ' . filesize($filepath));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: no-cache');
我然后创建该文件,并开始写它:
// Write header
fputcsv($output, $header);
fputcsv($output, array()); // Empty line
// Write column names
$column_headers = array_keys(array_flip($columns));
foreach ($data as $row)
{
fputcsv($output, $row);
}
echo readfile($filepath);
die();
该文件被生成并写入到指定的位置(在这种情况下,/var/www/<project>/<filename>.csv
没有任何指示给用户发生任何事情,没有下载对话框,没有任何内容。
如果任何人都可以发现我的代码或我的过程出现问题,请指出并且最好提出一个更好的/可选的方式,现在我们欢迎任何帮助。
您之前创建的文件*发送的头吧? – ficuscr
只是'readfile($ file_url);''不''echo' – rtfm
@ficuscr在发送头文件之前,您不需要创建文件,就在您尝试将文件读回给用户之前。 –