function parseAndInsertEXCELfileChunk($filename, $startRow, $chunkSize) {
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel.php';
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel/IOFactory.php';
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel/Shared/String.php';
$result = array();
$file_type = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader($file_type);
$objReader->setReadDataOnly(true);
$chunkFilter = new PHPExcel_ChunkReadFilter();
$objReader->setReadFilter($chunkFilter);
$chunkFilter->setRows($startRow, $chunkSize);
$objPHPExcel = $objReader->load($filename);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$chunkData = $objWorksheet->rangeToArray('A' . $startRow . ':' . $highestColumn . ($startRow + $chunkSize - 1), null, true, true, true);
// Далее можно обработать $chunkData, например, записать его в базу данных
// ...
// Рекомендуется использовать batch-вставку для обработки больших объемов данных
// Возвращаем информацию о количестве обработанных строк
return count($chunkData);
}
// Пример использования для чтения 10 000 строк, начиная с первой строки
$rowOffset = 1; // Номер строки с которой начать чтение
$chunkSize = 10000; // Количество строк для чтения
$processedRowCount = parseAndInsertEXCELfileChunk('file.xlsx', $rowOffset, $chunkSize);
А если нужно просто отключить лимит по времени, то можно использовать
set_time_limit(0);
Есть код:
function parseEXCELfile($filename){
require_once dirname(__FILE__).'/PHPExcel/Classes/PHPExcel.php';
$result = array();
$file_type = PHPExcel_IOFactory::identify($filename);
$objReader = PHPExcel_IOFactory::createReader( $file_type );
$objPHPExcel = $objReader->load($filename);
$result = $objPHPExcel->getActiveSheet()->toArray();
return $result;
}
$RES = parseEXCELfile('file.xlsx');
Код простой и работает на малых файлах, но дело в том, что у меня у файла 60-70к строк и скрипт не вывозит (502 ошибка). Подскажите пожалуйста, как прогонять к примеру и за один запрос получить определенное кол-во строк, например 10к...