Ошибка загрузки из базы данных в файл Excel с помощью электронной таблицы PHP

#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 секунды