Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Переполнение памяти в PHP как исправить?

88K
21 февраля 2013 года
IVaN4B
3 / / 21.02.2013
Помогите решить проблему
Allowed memory size of 134217728 bytes exhausted (tried to allocate 75 bytes).

Я делаю запрос на полную выдачу 100 000 записей в базе данных и на нем почему-то вываливается эта ошибка.

Код обработки запроса у меня такой:

 
Код:
$data = array();
$i = 0;
while($row = mysql_fetch_assoc($query)){ //ошибка указывает на эту строку
    $data[] = $row; //без этого все работает, получается переполняется массив?
    $i++;
    if($i > 60030) break; // опытным путем я выяснил, что вылетает после этой итерации :)
       
}
print_r($data);
Пожалуйста, объясните что не так. Заранее спасибо.
  • Это функция, которая возвращает двумерный массив с записями. Может быть как-то можно разбить массив? от IVaN4B, 26 февраля 2013 года
62K
27 февраля 2013 года
LWhisper
33 / / 27.11.2012
http://stackoverflow.com/questions/2313893/problems-with-php-when-trying-to-create-big-array
Наслаждайся. Хотя я бы всё-таки рекомендовал не использовать такие массивы. Одно дело буфер на 64кб, и совсем другое неповоротливые многомегабайтные монстры, фрагментирующие память. Выводи порциями. Более чем уверен, что никому не понадобится отображение 60 000 записей из ДБ. Либо нужно сузить границы поиска, либо выводить фрагментами. Страницами, как наиболее простой вариант, или подгружать по мере прокручивания списка и освобождать то, что осталось за границей видимости. Если же нужно произвести какие-то вычисления над этими записями или ту же выборку - сделай это на стороне сервера, в хранимой процедуре, и дёргай её из PHP.
366
22 февраля 2013 года
int
668 / / 30.03.2005
http://www.php.net/manual/en/ini.core.php#ini.memory-limit

А зачем тебе такой здоровенный массив на 60000 записей?
20K
22 февраля 2013 года
ellor!
198 / / 24.05.2012
Чтобы вывести записи в БД на экран, необязательно их предварительно загонять в массив, можно в самом цикле перебора выводить.
88K
22 февраля 2013 года
IVaN4B
3 / / 21.02.2013
Цитата: int
http://www.php.net/manual/en/ini.core.php#ini.memory-limit

А зачем тебе такой здоровенный массив на 60000 записей?



Это функция, которая возвращает двумерный массив с записями. Может быть как-то можно разбить массив?

8
26 февраля 2013 года
mfender
3.5K / / 15.06.2005
Решение как бы напрашивается само собой: ограничить выбор количества записей из БД.
88K
26 февраля 2013 года
IVaN4B
3 / / 21.02.2013
Цитата: mfender
Решение как бы напрашивается само собой: ограничить выбор количества записей из БД.


То есть ограничивать большие запросы, а если надо получить много записей, то выбирать их по частям?

8
27 февраля 2013 года
mfender
3.5K / / 15.06.2005
На секундочку, бывает нужда выборки из БД действительно непредсказуемого размера. 100К записей - мелочь, вобщем-то.
Просто в таких случаях нужно думать уже не об PHP, а о собственном серванте, настраиваемом под нужды.

UPD. Как-то работал в одной конторе, где склад имел более четырех миллионов артикулов. Разумеется со стандартным хостингом это немыслимо. Это свои компутеры со своими настройками.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог