Установляет ли PHP ограничения памяти на массивах? - программирование
Подтвердить что ты не робот

Установляет ли PHP ограничения памяти на массивах?

У меня странная проблема с памятью в PHP. Я думаю, что что-то только позволяет массиву максимум 0,25M. Похоже, что script использует только до 6M, прежде чем он сработает.

Здесь вывод из xdebug:

enter image description here

Здесь функция, которую она вызывает. Результат запроса sql составляет около 800 строк текста.

public function getOptions(){
    $sql = "select Opt,
                   Code,
                   Description
            from PCAOptions";

    $result = sqlsrv_query($this->conn,$sql);

    $arrayResult = array();
    echo ini_get('memory_limit'); //this confirms that my memory limit is high enough
    while($orderObject = sqlsrv_fetch_object($result,'PCA_Option')){
        array_push($arrayResult, $orderObject);
    }
    return $arrayResult;
}
4b9b3361

Ответ 1

Итак, я не знаю, как и почему это сработало, но я исправил проблему, комментируя эти две строки из моего файла .htaccess:

#    php_value memory_limit 1024M
#    php_value max_execution_time 18000

Я сделал это, потому что заметил, что phpinfo() возвращал разные значения для этих параметров в двух столбцах "master" и "local".

У моего php.ini был memory_limit = 512M и max_execution_time = 3000, тогда как мой файл .htacces имел указанные выше значения. Я думал, что .htaccess просто переопределит все, что было в php.ini, но я предполагаю, что это вызвало конфликт. Может ли это быть возможной ошибкой в ​​php?

Ответ 2

Существует несколько этапов, на которые распространяются некоторые дистрибутивы PHP, пакеты безопасности и веб-хосты, чтобы пользователи не могли обновить лимит фактической памяти PHP во время выполнения через ini_set. Наиболее вероятным кандидатом является suhosin пакет безопасности.

Этот более старый вопрос о переполнении стека содержит ряд других предложений.

Ответ 3

При работе с "большими" скриптами, которые, как я знаю, обходят мои пределы памяти PHP на сервере, Я всегда устанавливаю эту переменную в начале script. Работает постоянно.

ini_set("memory_limit","32M"); //Script should use up to 32MB of memory