如果點擊提交按鈕,我在這裏有一個代碼來生成一個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