Как обойти ошибку памяти при чтении большого количества записей из электронной таблицы?

0

Я еще не нашел для этого решения. Я использовал memory_limit для удаления ошибки, но он по-прежнему не вставляет все записи в базу данных. У меня 20K записей.

Вот ошибка, которую я получаю

Неустранимая ошибка: разрешенный размер памяти 134217728 байт исчерпан (пытался выделить 24 байта) в C:\xampp\htdoc\a\b\excel_reader.php в строке 1367

Любые идеи о том, как исправить это?

Здесь код:

ini_set('memory_limit', '512M');

$format_file = $_POST['fileexcel'];
$format_file = $_FILES['fileexcel']['tmp_name'];

if (strlen($format_file)<1){
echo "empty file";
exit();
}
$data = new Spreadsheet_Excel_Reader($format_file);
$result = $data->rowcount($sheet_index=0);
for ($i=2; $i<=$result; $i++){

    $data1 = $data->val($i,1);
    $data2 = $data->val($i,5);
    $data3 = $data->val($i,10);

    $q = mysql_query("INSERT INTO t (k,m,n) VALUES ('$data1','$data2','$data3')") or die(mysql_error());

    if ($result) {

        echo "success";

    }
    else {
        echo "failed";
    }


}
  • 1
    Возможно ли, чтобы вы пошатывали ВСТАВКИ, чтобы вы вставляли чанк за раз. Как правило, это было бы лучше, плюс вы могли бы сообщить о прогрессе клиенту.
  • 0
    я просто добавляю код @mark .. есть ошибка? у меня 20.000 данных ...
Показать ещё 3 комментария
Теги:

1 ответ

1

PHP имеет встроенное значение по умолчанию для таких параметров конфигурации.

В случае директивы memory-limit это 128 МБ. Таким образом, вы используете его.

  • 0
    memory_limit может устранить ошибку, НО запись данных не полная вставка в базу данных .. может быть у вас есть другое решение?
  • 1
    Ну, я бы сказал, улучшить свой сценарий. Если я правильно понял, вы пытаетесь загрузить данные в базу данных. Сценарий для этой цели никогда не должен использовать такие огромные объемы памяти. Но я не могу сказать ничего более конкретного, если вы не разместите код ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню