Php 生成Excel文件时出错

Php 生成Excel文件时出错,php,excel,Php,Excel,我这里有一个代码,可以在单击submit按钮时生成excel文件。该文件由来自mysql的数据填充,当然也基于mysql查询。这是: <?php require("aacfs.php"); header("Content-type: application/ms-excel"); header("Content-Disposition: attachment; filename=Reservation Summary_sortbydate.xls"); header("Pragma: n

我这里有一个代码,可以在单击submit按钮时生成excel文件。该文件由来自mysql的数据填充,当然也基于mysql查询。这是:

<?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());
?>

您是否尝试提取10个数据并查看它们是否有相同的结果或错误?我认为您试图导出的数据有点重,这就是您遇到执行超时的原因

使用此更新您的查询

$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 
group by 
    bdate 
LIMIT 10";
更新您的php.ini

     post_max_size = 8M
     default_socket_timeout = 60

我试着改变,但还是不起作用((到目前为止,我尝试检索的数据仅包含20行加上我在查询中调用的列。我尝试将数据限制为10行,正如您所说,是的,它确实正常工作。但我确实需要获取这些数据。我应该怎么做?转到mysql.ini并更改配置:尝试以下:[myisamchk]key_buffer_size=20M sort_buffer_size=20M read_buffer=2M write_buffer=2MI按照您的指示更改了配置,并删除了我以前对代码设置的限制,但它没有更改任何内容。下载文件需要时间,打开文件时最大执行错误仍然存在((这是我的php.ini..post_max_size=128M,default_socket_timeout=60而不是创建自己的制表符分隔字符串。内置函数比自制方法更快。一次将一行数据写入临时文件,而不是将其全部存储在内存中,然后将该文件流式传输到php://output 然后删除它