Допустимый объем памяти

Я использую PHP MySQLi Database Class, и на моем локальном компьютере все работает без любая проблема. Однако когда я загружаю свой проект на свой хост, я получаю следующую ошибку:

Неустранимая ошибка: разрешенный размер памяти 52428800 байт исчерпан (попытка выделить 50331646 байт) в /usr/home/data/site/public_html/classes/MysqliDb.php в строке 678

Строка 678 из MysqliDB.php содержит следующую команду:

call_user_func_array(array($stmt, 'bind_result')`, $parameters);

Когда я набираю php_value memory_limit 64M в .htaccess файле, я получаю такую ​​ошибку:

[Пт, 30 мая, 11:03:18 2014] [предупреждение] [клиент 37.98.159.18] /usr/home/data/site/public_html/.htaccess: Неверная команда 'php_value', возможно, неправильно написана или определена модулем, не включенным в конфигурация сервера, ссылка: http://example.org/index.php


person Abduhafiz    schedule 30.05.2014    source источник
comment
это может вам помочь - stackoverflow.com/questions/8812154/   -  person prava    schedule 30.05.2014
comment
кажется, вы пытались получить весь контент сразу, это легко заглушить память, просто выберите каждую строку и обработайте вместо этого   -  person Hieu Vo    schedule 30.05.2014


Ответы (2)


  1. Проверьте версию PHP и - особенно - если mysqli на хосте основан на mysqlnd. Для этого вы можете использовать phpinfo (). Смените хост, если это не так.
  2. Не жадничайте в определениях таблиц базы данных. Если вам нужно сохранить только страницу текста, не определяйте свой столбец как longblob, сделайте его скромным текстом - более ранние версии mysqli пытались выделить память для максимально возможного размера на основе определения строки, а не реального размера данных.
  3. Если ваш запрос возвращает слишком много строк, и вам нужны все они, небуферизация вашего запроса решит проблему.
person Your Common Sense    schedule 30.05.2014
comment
Версия PHP 5.2.17 Я не обнаружил, что mysqlnd в столбце таблицы phpinfo () имеет значение mediumtext - person Abduhafiz; 30.05.2014
comment
5.2 ужасно устарела. - person Your Common Sense; 30.05.2014
comment
Спасибо. Я изменил тип столбца на ТЕКСТ, и ошибка исправлена. - person Abduhafiz; 30.05.2014

Причина в том, что PHP исчерпал максимальный предел памяти, установленный значением конфигурации memory_limit.

Обычно это значение конфигурации PHP имеет очень низкое значение по умолчанию - 8 МБ или 16 МБ.

Итак, увеличьте memory_limit в файле конфигурации сервера php.ini. Вы можете просто изменить это значение с 64 МБ на 256 МБ или 512 МБ в зависимости от ваших потребностей (чем меньше размер, тем лучше).

конфигурация в php.ini файле

memory_limit = 128M
max_execution_time = 19000

Другой вариант - увеличить это значение с помощью .htaccess file, чтобы решить эту проблему. так должно быть, как показано ниже:

php_value memory_limit 128M 
php_value max_execution_time 19000
person Santosh Ghimire    schedule 07.02.2020
comment
Увеличение лимита памяти похоже на тушение пожара бензином. Вам нужно сделать так, чтобы ваш PHP потреблял меньше памяти, как это сделал OP. - person Your Common Sense; 07.02.2020
comment
Итак, как лучше решить эту проблему? Я также сталкиваюсь с той же проблемой и, наконец, нашел, что это простое решение работает для меня. - person Santosh Ghimire; 07.02.2020
comment
Оптимизируйте потребление памяти. Выберите только необходимые данные, прочтите информацию по маленьким щелочкам и т. Д. - person Your Common Sense; 07.02.2020