我在用着PHP
and MySQL
获取数据到HTML
桌子。数据应该下载HTML
在 Excel 文件中。使用以下代码:
$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 文件的弹出窗口中完成的。下载完成后如何关闭弹出窗口?
在循环中输出 html,而不是缓冲它直到结束。这将减少 PHP 所需的内存量,并可能加快下载过程。 PHP 和您的 Web 服务器仍会进行一些缓冲。这是可以的,但你可以用显式的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 缓冲区中使用更少的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)