Вопрос по export, php, excel, mysql – Скачать Excel застрял 188kb

1

Привет! Я экспортирую свои данные MySQL в формате Excel. В настоящее время у меня 14k + записей, но проблема в том, что они застряли на 188 КБ, но когда я попытался урезать результат до 100 записей, это не прерывает загрузку.

Вот мой код:

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

Я зашел на несколько сайтов / тем, но все еще не нашел решения. : & APOS; (

Пожалуйста, поставьтеvar_dump($result) после$result был установлен и опубликовать его где-нибудь, или, по крайней мере, несколько строк из них. Для меня это звучит как проблема умлаута, которая всегда создает проблемы, т.е.PEAR'S Spreadsheet Writer и другие библиотеки Excel. GodLesZ

Ваш Ответ

1   ответ
3

Это только дикое предположение, но вам может потребоваться заранее рассчитать размер документа и установить & quot; Content-length & quot; заголовок

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

Похожие вопросы