2012-08-17 8 views
0

제출 버튼을 클릭하면 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를 실행하므로 왜 이것이 작동하지 않는지 정말로 좌절감을 느낍니다. 나는 다른 일을 원활하게 작동하지만 오늘 다시 확인해 보면이 오류가 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다. 신의 축복이야!

+0

사용 fputcsv()이 아니라 자신의 탭으로 구분 된 문자열을 만드는 것보다. 내장 기능은 귀하가 직접 만든 방법보다 빠릅니다. –

+0

한 번에 한 행씩 데이터를 메모리에 작성하지 않고 메모리에 모두 작성한 다음 파일을 PHP : // 출력으로 스트리밍하고 나중에 삭제하십시오 –

답변

0

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 
+0

변경하려고 시도했지만 여전히 작동하지 않습니다. : ((내가 검색하려고하는 데이터에는 현재 20 개의 행과 쿼리에 대해 호출하는 열이 포함되어 있습니다.) – xjshiya

+0

내가 말한대로 데이터를 10 개로 제한하려고 시도했지만 올바르게 작동했습니다. .? 정말 그 데이터를 가져올 필요가 어떻게해야합니까 – xjshiya

+0

당신의 mysql.ini로 이동하여 구성을 변경이 시도 : [myisamchk를] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M –

관련 문제