При загрузке на сайт (импорт товаров) файла с количеством строк более 250 примерно, вылетает ошибка, нашел инфу, что скорее всего оперативной памяти не хватает.
Подскажите пожалуйста, как можно доработать рабочий скрипт на загрузку больших файлов эксель по частям? Или может есть еще какие-нубудь решения?
Вот скрипт загрузчика:
function importAction () {
if ($_POST) {
// коннектим функцию
require_once ADMIN_PATH.'/plagin/excel/reader.php';
// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();
// Set output Encoding.
$data->setOutputEncoding('UTF8');
$data->setUTFEncoder('mb');
$data->read($_FILES['file1']['tmp_name']);
error_reporting(E_ALL ^ E_NOTICE);
// С отключением товара
$_str=array();
for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
$_str[]=$data->sheets[0]['cells'][$i][$j];
}
$_sql="SELECT * FROM `catalog` WHERE (`artikl`='".$_str[1]."')";
$result_artikul=mysql::query_one($_sql,0);
if ($result_artikul) {
// работаем с ценой
$_sql="UPDATE `catalog`
SET `sklad`='".$_str[2]."', `cost`='".$_str[3]."'
WHERE (`artikl`='".$_str[1]."')";
$result=mysql::just_query($_sql,0);
} else {
// товара нет на сайте
$_sql="INSERT INTO `catalog` (`artikul`, `name`, `cost`, `id_parent`, `status`, `created_at`, `sklad`, `supplier`, `brand`, `text_short`, `artikb`)
VALUES ('".$_str[0]."', '".$_str[1]."', '".$_str[3]."', '".$_str[7]."', '".$_POST['type_import2']."', '".date('Y-m-d')."', '".$_str[2]."', '".$_POST['type_import4']."', '".$_str[10]."', '".$_str[11]."', '".$_str[12]."')";
$result=mysql::just_query($_sql,0);
}
$_str="";
}
}
return system::show_tpl(
array(
'msg'=>$this->msg,
'select'=>dbh::get_catolog_tree(),
'tpl_folder'=>$this->tpl_folder
),$this->tpl_folder.'/import.php');
}
Так понимаю, что жрет память именно на цикле апдейта товаров, при инсерте загружает быстрее.
И еще, что нужно править в таком случае для загрузки частями, этот скрипт или может парсер эксель?
Спасибо!