如果点击提交按钮,我在这里有一个代码来生成一个excel文件。该文件填充了来自mysql的数据,当然是基于mysql查询。那就是:生成Excel文件时出错
<?php
require("aacfs.php");
header("Content-type: application/ms-excel");
header("Content-Disposition: attachment; filename=Reservation Summary_sortbydate.xls");
header("Pragma: no-cache");
header("Expires: 0");
$head1="Ayala Aviation Corporation";
$head2="RESERVATION SUMMARY";
$head3="For the period ___________";
$heads="$head1\n$head2\n$head3\n";
$query = "select bdate as 'Date', cliename as 'Client', grpcode as 'Group Code', bperson as 'Contact', reservno as 'Reservation No.', acode as 'Aircraft', fdate as 'Flight Date', itinerary as 'Itinerary', etd as 'ETD', eta as 'ETA', pname as 'Passengers', status as 'Status', cutoff as 'Confirmation Cut-off', adminid as 'Reserved by' from reservation order by bdate";
$result = mysql_query($query);
if($result) {
$count = mysql_num_rows($result);
for($i=0; $i<$count; $i++) {
for ($i = 0; $i < mysql_num_fields($result); $i++)
{
$schema_insert_rows.=mysql_field_name($result,$i) . "\t";
}
$schema_insert_rows.="\n";
while($row = mysql_fetch_row($result)) {
$line = '';
foreach($row as $value) {
if((!isset($value)) OR ($value == "")) {
$value = "\t";
} else {
$value = str_replace('"', '""', $value);
$value = '"'.$value.'"'."\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r", "", $data);
if($data == "") {
$data = "\n(0) Records Found!\n";
}
}
print mb_convert_encoding("$heads\n$schema_insert_rows\n$data", 'UTF-16LE', 'UTF-8');
} else die(mysql_error());
?>
这需要长的时间才执行,当它终于下载了我的电脑上,该文件显示一条错误消息:“超过60秒的最长执行时间”。我尝试设置像这样的时间限制:set_time_limit(0)
,但是在我下载文件之前还需要很长时间,并且当我打开下载的文件时,文件本身又会显示另一个错误:'134217728字节的允许内存大小已耗尽(试图分配133693422字节)'
我有这个确切的代码,但在另一个php文件上运行不同的mysql_query,所以我非常沮丧,为什么这不起作用。前几天我的工作很顺利,但今天我再次检查时发现了这个错误。我究竟做错了什么?任何帮助,将不胜感激。先谢谢你!上帝保佑!
使用fputcsv(),而不是建立自己的制表符分隔字符串。内置功能比您自制的方法更快。 – 2012-08-17 06:27:05
将数据一次写入一个临时文件,而不是将其全部写入内存,然后将该文件传输到您的php://输出,然后将其删除 – 2012-08-17 06:28:48