大家好。该代码有一个“半工作”版本,按照计划,应该将从数据库接收的数据下载为 .csv 文件。事实上,它是半工作的,因为如果数据库的请求返回少量数据,则下载文件,但如果从数据库返回超过 25-30 行,则所有这些数据将显示为页面上的文本,而不是将其作为文件提供。该函数本身如下所示:
public function getReport( Request $request, Response $response ): Response
{
$form = $request->getParsedBody();
$get_report = $this->database->getConnection()->prepare( 'SELECT * FROM cafe WHERE date between :after AND :before' );
$get_report->execute([
'after' => $form['date-after'],
'before' => $form['date-before']
]);
$stream = fopen('php://output', 'w');
while($row = $get_report->fetch()) {
fputcsv($stream, $row, ";");
};
return $response
->withHeader('Content-Type', 'application/csv')
->withHeader('Content-Disposition', 'attachment; filename="export.csv";');
}
我自己处理不了,我来找你帮忙:{
问题很可能是您尝试
php://output在函数中直接将数据写入流。这可能会导致在设置响应标头之前发送数据,从而导致浏览器处理不正确。相反,您可以使用临时流,然后将其传回响应。它可能如下所示: