PHPExcel рдФрд░ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЗрдВ

PHPExcel xls, xlsx рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрд╡рд░реВрдкрдг рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реВрддреНрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ xlsx рд╕реЗ рдЖрдк рдЪрд┐рддреНрд░ рднреА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреЛрд╕реНрдЯ рдкрд░ рдерд╛ - PHPExcel рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкрдарди ред рдореИрдВ рдХреЗрд╡рд▓ PHPExcel рдХреЗ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ - рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд╣рд░ рд╕рдордп "рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐: рдореЗрдореЛрд░реА рд╕реЗ рдмрд╛рд╣рд░" рдмрд╛рд░рд┐рд╢ рд╣реЛ рд░рд╣реА рд╣реИред рдпрд╣ рдкреЛрд╕реНрдЯ рдЗрд╕реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдкрдврд╝реЗрдВ


рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ (~ 25,000 рд▓рд╛рдЗрдиреЗрдВ) рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рд▓рд╛рдЗрдиреЗрдВред рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

import_xls.php

<?php require_once 'path/to/PHPExcel/IOFactory.php'; class chunkReadFilter implements PHPExcel_Reader_IReadFilter { private $_startRow = 0; private $_endRow = 0; public function setRows($startRow, $chunkSize) { $this->_startRow = $startRow; $this->_endRow = $startRow + $chunkSize; } public function readCell($column, $row, $worksheetName = '') { if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) { return true; } return false; } } session_start(); if ($_SESSION['startRow']) $startRow = $_SESSION['startRow']; else $startRow = 13; $inputFileType = 'Excel5'; $objReader = PHPExcel_IOFactory::createReader($inputFileType); $chunkSize = 20; $chunkFilter = new chunkReadFilter(); while ($startRow <= 65000) { $chunkFilter->setRows($startRow,$chunkSize); $objReader->setReadFilter($chunkFilter); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load($fileName); //-     $startRow += $chunkSize; $_SESSION['startRow'] = $startRow; unset($objReader); unset($objPHPExcel); } echo "The End"; unset($_SESSION['startRow']); ?> 


ChunkReadFilter рд╡рд░реНрдЧ рд╣реА рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБред

рджреВрд╕рд░реЗ, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо ReadDataOnly рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдХрд▓реНрдк рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрд╡рд░реВрдкрдг, рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдФрд░ рддреАрд╕рд░рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рдкрд░реЗрд╢рд╛рди () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдореЗрдореЛрд░реА рдХреЛ рдлреНрд░реА рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдХреА рдХрдореА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдЭрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░, php рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрднреА рднреА рдПрдХ рд░рди-рдЯрд╛рдЗрдо рд╕реАрдорд╛ рд╣реИред рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордп рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рддреНрд░ рдФрд░ рдЕрдВрддрд┐рдо "рдж рдПрдВрдб" рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВред

рдФрд░ рдпрд╣рд╛рдБ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЛрдб рд╣реИред

import_xls.html

 <html> <head> <title> -</title> <script src="/media/js/jquery.js" type="text/javascript"></script> <script src="/media/js/import-xls.js" type="text/javascript"></script> </head> <body> <h1> -</h1>   ,    ! <div id="progress-bar"> </div> <div id="content"> </div> </body> </html> 


рдЖрдпрд╛рдд xls.js

 function repeat_import() { $.ajax({ url: "/import_xls.php", timeout: 50000, success: function(data, textStatus){ $("#progress-bar").append("I"); if (data == "The End") { $("#content").html("<h2> !</h2>"); } else { $("#content").html("<p>" + data + "</p>"); repeat_import(); } }, complete: function(xhr, textStatus){ if (textStatus != "success") { $("#progress-bar").append("I"); repeat_import(); } } }); } $(function (){ repeat_import(); }); 


рдпрд╛рдиреА рд╣рдо рдЕрдкрдиреА import_xls.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЙрддреНрддрд░ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдирдпрд╛ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВред рдореИрдВ AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдорд┐рд▓рд╛ - рд╕реНрд╡рдпрдВ php рдореЗрдВ рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 header ("Location: import_xls.php");). 


рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ AJAX рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдмрд╕ рдПрдХ рдкреНрд░рдЧрддрд┐ рдмрд╛рд░ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ рдФрд░ рдмрдиреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реЛ рдЪреБрдХреА рд╣реИред рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: AJAX рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдХрд┐рддрдиреА рд▓рд╛рдЗрдиреЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред

рдлрд╝рд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдб


рд▓рдЧрднрдЧ 25,000 рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ xls рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИ:

  $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; $cacheSettings = array( 'memoryCacheSize ' => '256MB'); PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); 


рдЖрдк рдЕрднреА рднреА рдХреИрд╢рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрдореНрдкреЗ рдХреЛ php рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рднреА рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache; $cacheSettings = array( 'memcacheServer' => 'localhost', 'memcachePort' => 11211, 'cacheTime' => 600 ); 


рд╕рд╛рде рд╣реА cache_to_discISAM ред

рдЕрджреНрдпрддрди
рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдб рдХреЛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╣реА рд╣реЗрдмреЗ (рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рджрд┐рди рдХреЗ рджреЗрд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдордп) рдФрд░ рдЬрд▓реНрджрдмрд╛рдЬреА рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рд╕рдордЭрд╛ред рдЕрдм рд╕реЗ рдореИрдВ рдЬрд▓реНрджрдмрд╛рдЬрд╝реА рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ рдФрд░ рд╣реЛрд╢рд┐рдпрд╛рд░ рд░рд╣реВрдБрдЧрд╛ред

UPDATE2
Redid рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЕрдм рдпрд╣ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In148203/


All Articles