Этот тип ошибки чаще всего возникает по одной из трех причин: попробуйте что-нибудь интересное с большими изображениями, слишком большой набор данных или слишком мало доступной памяти.
Вы не работаете с изображениями, так что просто.
При «нормальном» кодировании это часто не memory_limit, но, по крайней мере, убедитесь, что это не так. Это часто 128 МБ или выше, и даже если он немного ниже, ваш код не должен потреблять так много.
Так что это, вероятно, объем данных . Продолжая оттуда:
Тот факт, что это точка переполнения, не означает, что эта функция является причиной этого. Это могли быть «другие функции», которые заполняли ведро до краев, и этот конкретный фрагмент кода был «последней каплей».
Поскольку он пытается выделить 12 МБ больше, чем уже есть, есть большая вероятность, что это цикл. Большинство переменных в области действия функции небольшие, кроме $users
. Вы загружаете это с помощью class User()
. Это большой класс? Если это так, то это ваша проблема.
// A small improvement might be setting it to a single user first, mutate that small variable, and push the result to the array:
$newUser = new User($row["userId"], $dealerId);
$newUser->populate();
$users[$i] = $newUser;
Если этого недостаточно, минимизируйте данные. Если вы создаете обзор с идентификатором и именем пользователя, вам не нужен весь набор, выберите только соответствующую информацию. Если можете, разбейте его на куски, чтобы очистить память.