2012-05-17 2 views
1

Привет Я экспортирую свои данные mysql в формате excel, в настоящее время у меня есть 14k + записи, но проблема в том, что он застрял @ 188kb, но когда я попытался обрезать результат до 100 записей, он не прерывает скачивание.Excel download stuck 188kb

Вот мой код:

function xlsBOF() { 
    echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0); 
    return; 
} 

function xlsEOF() { 
    echo pack("ss", 0x0A, 0x00); 
    return; 
} 

function xlsWriteNumber($Row, $Col, $Value) { 
    echo pack("sssss", 0x203, 14, $Row, $Col, 0x0); 
    echo pack("d", $Value); 
    return; 
} 

function xlsWriteLabel($Row, $Col, $Value) { 
    $L = strlen($Value); 
    echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L); 
    echo $Value; 
return; 
} 

    mysql_connect($dbhost,$dbuser,$dbpass); 
    //mysql_select_db($dbname) or die("Unable to select database"); 
    $result = mysql_db_query($dbname, "select id, or_number, name, client_code, address, vehicle_info, vehicle_color, plate_num, sticker_type, application_date, amount_paid, traffic_violations, delivery_date, edited_by, phase, version FROM owner order by application_date desc"); 




// Send Header 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download");; 
header("Content-Disposition: attachment;filename=epal.xls"); // à¹à¸¥à¹‰à¸§à¸™à¸µà¹ˆà¸à¹‡à¸Šà¸·à¹ˆà¸­à¹„ฟล์ 
header("Content-Transfer-Encoding: binary "); 

      xlsBOF(); 
      xlsWriteLabel(0,0,"Current SLVA Owner List:"); 
      xlsWriteLabel(2,0,"#"); 
      xlsWriteLabel(2,1,"OR #"); 
      xlsWriteLabel(2,2,"Name"); 
      xlsWriteLabel(2,3,"Client Code"); 
      xlsWriteLabel(2,4,"Address"); 
      xlsWriteLabel(2,5,"Vehicle Info"); 
      xlsWriteLabel(2,6,"Vehicle Color"); 
      xlsWriteLabel(2,7,"Plate #"); 
      xlsWriteLabel(2,8,"Sticker Type"); 
      xlsWriteLabel(2,9,"Application Date"); 
      xlsWriteLabel(2,10,"Amount Paid"); 
      xlsWriteLabel(2,11,"Traffic Violations"); 
      xlsWriteLabel(2,12,"Delivery Date"); 
      xlsWriteLabel(2,13,"Edited By"); 
      xlsWriteLabel(2,14,"Phase"); 
      xlsWriteLabel(2,15,"Version"); 


      $xlsRow = 3; 
      while(list($id, $or_number, $name, $client_code, $address, $vehicle_info, $vehicle_color, $plate_num, $sticker_type, $application_date, $amount_paid, $traffic_violations, $delivery_date, $edited_by, $phase, $version) = mysql_fetch_row($result)) { 
         xlsWriteLabel($xlsRow,0, $id); 
         xlsWriteLabel($xlsRow,1,$or_number); 
         xlsWriteLabel($xlsRow,2,$name); 
         xlsWriteLabel($xlsRow,3,$client_code); 
         xlsWriteLabel($xlsRow,4,$address); 
         xlsWriteLabel($xlsRow,5,$vehicle_info); 
         xlsWriteLabel($xlsRow,6,$vehicle_color); 
         xlsWriteLabel($xlsRow,7,$plate_num); 
         xlsWriteLabel($xlsRow,8,$sticker_type); 
         xlsWriteLabel($xlsRow,9,$application_date); 
         xlsWriteLabel($xlsRow,10,$amount_paid); 
         xlsWriteLabel($xlsRow,11,$traffic_violations);  
         xlsWriteLabel($xlsRow,12,$delivery_date); 
         xlsWriteLabel($xlsRow,13,$edited_by); 
         xlsWriteLabel($xlsRow,14,$phase);  
         xlsWriteLabel($xlsRow,15,$version); 

        $xlsRow++; 
       } 
       xlsEOF(); 
      exit(); 

Я пошел на несколько сайтов/потоков, но до сих пор не нашли решения. : '(

+0

Пожалуйста, положить 'var_dump ($ результат)' после '$ result' был установлен и разместить его где-нибудь, или по крайней мере некоторые строки из них. Звучит как проблема умлаута, которая всегда создает проблемы с помощью [PEAR'S Spread (http://pear.php.net/package/Spreadsheet_Excel_Writer/redirected) и другие библиотеки excel. – GodLesZ

ответ

3

Это только дикая догадка, но вам, возможно, потребуется рассчитать размер документа заранее и установить „Content-Length“ заголовка

header("Content-length: " . strlen($document)); 

Вы должны будете хранить выход в строка, так что вы можете вычислить длину (буферизацию вывода может помочь захватить ваше использование xlsWriteLabel)

ob_start(); 
xlsBOF(); 
xlsWriteLabel(); 
// etc etc 
xlsEOF(); 
$document = ob_get_contents(); 
ob_end_clean(); 
header("Content-length: " . strlen($document)); 
echo $document; 
exit();