#php #spreadsheet #phpspreadsheet
Вопрос:
Я пытаюсь создать страницу, которая может загружать сотни тысяч данных и экспортировать их в файл Excel с помощью PhpSpreadsheet. Как бы то ни было, я получаю ошибку HTTP 500
include('../config.php');
require_once '../../epson/resources/vendor/autoload.php';
use PhpOfficePhpSpreadsheetIOFactory;
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
$spreadsheet = new Spreadsheet();
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
$filename = generateFileName($filename);
$sql = "SELECT * FROM table";
$activeSheet->setCellValue('A1', 'pcbid');
$activeSheet->setCellValue('B1', 'pcbtype');
$activeSheet->setCellValue('C1', 'grouprev');
$activeSheet->setCellValue('D1', 'symbol');
$mdthistorydownloadresult = $conn->query($sql);
if($mdthistorydownloadresult->num_rows > 0) {
$i = 2;
while($row = $mdthistorydownloadresult->fetch_assoc()) {
$activeSheet->setCellValue('A'. $i, $row['pcbid']);
$activeSheet->setCellValue('B'. $i, $row['pcbtype']);
$activeSheet->setCellValue('C'. $i, $row['grouprev']);
$activeSheet->setCellValue('D'. $i, $row['symbol']);
$i ;
}
}
$Excel_writer = new Xlsx($spreadsheet);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='. $filename .'.xlsx');
$Excel_writer->save('php://output');
exit;
всего строк = 136750
Это прекрасно работает, когда я ограничиваю запрос 1000.
SELECT * FROM table LIMIT 1000
Комментарии:
1. существует несколько возможных причин … Время ожидания PHP: Сценарий занимает слишком много времени или ограничение памяти PHP: Процесс превышает объем памяти и, следовательно, не может быть выполнен правильно попробуйте увеличить
memory_limit
2. опубликуйте код mysql. но я не верю, что запрос select на 200 000 записей занимает 0,5 секунды