Próbuję przechodzić przez 3-milimetrowy dokument Excel, aby uzyskać wszystkie dane, które będę następnie musiał wstawić do bazy danych. Arkusz, którego używam, ma 6500 wierszy, ale może się różnić w przyszłości. Zauważyłem, że chociaż używam zalecanych technik oszczędzania pamięci, to wciąż faulujeProblem z pamięcią PHPExcel
$reader = PHPExcel_IOFactory::createReaderForFile($file_path);
$reader->setReadDataOnly(true);
//$sheets = $this->getWorksheetNames($file['tmp_name'], 0);
$reader->setLoadSheetsOnly('spreadsheetname');
$chunkFilter = new IPO_Reader();
$reader->setReadFilter($chunkFilter);
$highestRow = 10000; //$this->objWorksheet->getHighestRow();
$chunkSize = 1;
$highestColumn = "Y";
for ($startRow = 2; $startRow <= $highestRow; $startRow += $chunkSize)
{
$chunkFilter->setRows($startRow, $chunkSize);
$objPHPExcel = $reader->load($file_path);
for($row = $startRow ; $row <= $startRow + $chunkSize; $row++)
{
$this->read_row = $objPHPExcel->getActiveSheet()->rangeToArray('A'.$row.':'.$highestColumn.$row, null, true, true, true);
$this->read_row = end($this->read_row);
foreach($this->read_row as $column => $value)
{
$db_column_name = $this->_getDbColumnMap($column);
if(!empty($db_column_name))
{
$this->new_data_row[$db_column_name] = $this->_getRowData($value, $column);
}
}
$this->read_row = null;
$this->new_data_row['date_uploaded'] = date("Y-m-d H:i:s");
$this->new_data_row['source_file_name'] = $file_name;
$ipo_row = new Model_UploadData_IPO();
$ipo_row->create($this->new_data_row);
$this->new_data_row = null;
unset($ipo_row);
gc_collect_cycles();
}
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
gc_collect_cycles();
kiedy przetestować zużycie pamięci zanim rozbroić objPHPExcel i po, nie ma wzmocnienia pamięci, jestem bardzo zdezorientowany, ponieważ podzielenie na porcje nie pozwala mi wyczyścić pamięci po każdym kawałku, a użycie stopniowo wzrasta, a przy limicie ustawionym na 250 MB, pozwala mi tylko dodać ~ 500 rekordów
i nie ostatni problem =) po prostu spojrzeć na http://stackoverflow.com/questions/6857075/problem-with-excell-export (jeść 500MB) – Subdigger
Niestety brakowało połowa tam zdanie. pozwala mi dodać tylko 500 rekordów –
Kasia: możesz edytować swoje pytania, jeśli popełnisz błąd – Mchl