Неустранимая ошибка: недостаточно памяти (выделено 12582912) (попытка выделить 12582920 байт) - PullRequest
0 голосов
/ 25 июня 2018

в php5 моя программа работает, когда я перехожу на php7, содержимое таблицы не показывается. это ошибка

Неустранимая ошибка: недостаточно памяти (выделено 12582912) (попытался выделить 12582920 байт) в E: \ xampp \ htdocs \ account \ classes \ class.user.php на линия 216

Ошибка кода

for ($i=0; ($row = Sql::fetch_array($resource)) !== FALSE; $i++) {

                $users[$i] = new User($row["userId"], $dealerId);
                $users[$i]->populate();

и это весь код публичной статической публичной статической функции getAllUsers ($ dealerId)

 public static function getAllUsers($dealerId) {

    $users = array();


    $sql_query = "SELECT userId FROM dealer_users WHERE dealerId='".$dealerId."' ORDER BY username ASC";
    $sql_query_1 = "SELECT COUNT(*) FROM dealer_users WHERE dealerId='".$dealerId."'";

    self::$lastCount = Sql::fetch_first_row_column($sql_query_1);

    $resource = Sql::query($sql_query) or die(mysqli_error($sql_query));

    for ($i=0; ($row = Sql::fetch_array($resource)) !== FALSE; $i++) {

        $users[$i] = new User($row["userId"], $dealerId);
        $users[$i]->populate();
    }


    Sql::free_result($resource);

    return $users;

}

1 Ответ

0 голосов
/ 25 июня 2018

Этот тип ошибки чаще всего возникает по одной из трех причин: попробуйте что-нибудь интересное с большими изображениями, слишком большой набор данных или слишком мало доступной памяти.

Вы не работаете с изображениями, так что просто.
При «нормальном» кодировании это часто не 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;

Если этого недостаточно, минимизируйте данные. Если вы создаете обзор с идентификатором и именем пользователя, вам не нужен весь набор, выберите только соответствующую информацию. Если можете, разбейте его на куски, чтобы очистить память.

...