PHP
Работа с памятью PHP
Надо сделать импорт большого файла. В коде используется цикл в котором 50 000 итераций, в каждой итерации в примерно 10 переменных записываются строки, числа либо массивы, когда тестил на 1000 итерации все было замечательно, но на 50 000 проблемы с памятью. Вышла ошибка "Allowed memory size of 134217728 bytes exhausted" . Я начинающий не особо шарю в оптимизации итд, Поможет ли если в конце каждой итерации делать unset переменных, или есть какие либо советы как пофиксить эту ошибку?
У тебя лимит оперативной памяти, выделяемой для работы скрипта, в настройках PHP установлен в 128 Kb (134217728 байт). Что, очевидно, для твоей задачи мало.
Если у тебя НЕ виртуальный хостинг, то для PHP5 лимит можно увеличить до 2 Gb - либо в настройках PHP, либо вызовом ini_set('memory_limit', '2G'); в начале скрипта.
Для PHP7/64 максимально возможное значение лимита ограничено только объёмом оперативной памяти.
Если у тебя НЕ виртуальный хостинг, то для PHP5 лимит можно увеличить до 2 Gb - либо в настройках PHP, либо вызовом ini_set('memory_limit', '2G'); в начале скрипта.
Для PHP7/64 максимально возможное значение лимита ограничено только объёмом оперативной памяти.
Самый Добрый !!!
Матвей Бауков, все равно следует оптимизировать код и удалить мусор
Стас Ивкин
а если виртуальный то нельзя увеличивать лимит?
Код в студию
как вариант можно в браузере тоображать градусник (т е прогресс бар ) а фоном слать AJAX запросы которые будут на сервере добавлять по одной записи в таком случае сервер не будет напрягаться а пользователь включив загрузку может спокойно пить кофе с бубликом ..
А как ты узнал что 50000 итераций (ах да у тебя там придел стоит)? Увеличь свои 10 строк до 10000) и сократи количество итераций до 50000, можно оставить, даже можно поднять это значение до 100000
Стас Ивкин
ничего не понял, 50 000 итераций потому что файл я записываю в массив, число итерций равно длине массива, а в файле 50000 строк
Дмитрий Пославский
Извиняюсь, приблизительно 250 000 копий
У вас ошибка при заполнении массивов или при сохранение в базу?
Если в базу - Почему бы не сделать поточность? Разбейте массив на определенное количество функцией array_chunk и выполните несколько Insert, а лучше примените batchInsert, то есть выполните один запрос на вставку строки, только значением будет не строка, а массив, например mysql_query('INSERT INTO table (text) VALUES '.implode(',', $data)); где data $data[] = '("'.mysql_real_escape_string($row['text']).'", и т. д.
Если в массив, то почему бы не применить поточность опять же, создайте допустим 5 массив которые будут хранить определенное количество элементов, потом объедините их после всех операций
Если в базу - Почему бы не сделать поточность? Разбейте массив на определенное количество функцией array_chunk и выполните несколько Insert, а лучше примените batchInsert, то есть выполните один запрос на вставку строки, только значением будет не строка, а массив, например mysql_query('INSERT INTO table (text) VALUES '.implode(',', $data)); где data $data[] = '("'.mysql_real_escape_string($row['text']).'", и т. д.
Если в массив, то почему бы не применить поточность опять же, создайте допустим 5 массив которые будут хранить определенное количество элементов, потом объедините их после всех операций
Стас Ивкин
Ошибка при сохранении в базу, примерно 3000 импортитруется потом ошибка, попробую вариант который вы описали
Похожие вопросы
- Работа с датой PHP
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Есть ли какой-нибудь тайм аут на работу времени функции в php?
- Работа в php, помогите, пожалуйста
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?
- Пишу авторизацию (php). Куки не работают
- Вопрос начинающего программиста Python\PHP