我正在使用PHP
和MySQL
将数据提取到HTML
表。该数据应该在Excel文件中下载HTML
。使用以下代码:
$filename = "individual_list_" . date('Ymdhms') . ".xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
$html='<style>.num {mso-number-format:General;}.text{mso-number-format:"\@";}</style><table border=1>';
$rowCount=1;
foreach ($export_data as $key => $row) {
if(!$header)
{
$header_field=array_keys($row);
$html .='<thead><tr>';
foreach ($header_field as $k => $value) {
$html .='<th class="text">'.$value.'</th>';
}
$html .='</tr></head>';
$header=true;
}
$values=array_values($row);
$rowCount++;
$html .='<tbody><tr>';
foreach ($values as $k => $value) {
if (DateTime::createFromFormat('Y-m-d G:i:s', $value) !== FALSE) {
$value = date('Y-m-d', strtotime($value));
}
$html .='<td class="text">'.$value.'</td>';
}
$html .='</tr></tbody>';
}
$html .='</table>';
echo $html;
有大约90K的记录要导出。此代码曾生成Allowed Memory Exhausted
错误,因此我更改了内存限制。现在错误已解决,但数据显示为HTML Table
而不是下载。该代码适用于较少的记录集。如何解决问题?
导出(下载)在弹出窗口中完成,下载Excel文件。如何在下载完成后关闭弹出窗口?
答案 0 :(得分:0)
在循环中输出html而不是缓冲直到结束。这将减少PHP所需的内存量,并可能加快下载过程。 PHP&amp;你的网络服务器仍然会做一些缓冲。这没关系,但您可以使用显式flush()覆盖;如果问题仍然存在,则命令。
$filename = "individual_list_" . date('Ymdhms') . ".xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
echo '<style>.num {mso-number-format:General;}.text{mso-number-format:"\@";}</style><table border=1>';
$rowCount=1;
foreach ($export_data as $key => $row) {
$html = '';
if(!$header)
{
$header_field=array_keys($row);
$html .='<thead><tr>';
foreach ($header_field as $k => $value) {
$html .='<th class="text">'.$value.'</th>';
}
$html .='</tr></head>';
$header=true;
}
$values=array_values($row);
$rowCount++;
$html .='<tbody><tr>';
foreach ($values as $k => $value) {
if (DateTime::createFromFormat('Y-m-d G:i:s', $value) !== FALSE) {
$value = date('Y-m-d', strtotime($value));
}
$html .='<td class="text">'.$value.'</td>';
echo $html;
}
echo '</tr></tbody>';
echo '</table>';
}
根据您的MySQL客户端库,您还可以使用无缓冲的MySQL查询,这些查询允许您的脚本在从MySQL接收数据后立即开始生成HTML,并且使用的内存少于等待将整个结果加载到一个PHP缓冲区。