Предотвратить переполнение памяти - PullRequest
0 голосов
/ 19 июля 2010

В какой-то момент в моем php-скрипте, использующем curl, появляется следующая ошибка: «Неустранимая ошибка: допустимый объем памяти 262144 байта исчерпан (при попытке
выделить 77824 байта) в» ... Он указываетиз этой части скрипта: "$ s = curl_exec ($ c);"

В чем проблема?И как это уладить?

Ответы [ 4 ]

8 голосов
/ 19 июля 2010

В этом случае ваш сервер неправильно настроен.

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

200 килобайт ОЗУ на скрипт недостаточно для большинства сценариев PHP.Стандарт в моем опыте минимум 8 МБ;16 МБ это нормально.Система блогов, такая как WordPress (по общему мнению, она толстая, но все еще одна из самых популярных систем блогов), дросселирует 8 МБ и работает на полпути прилично с 16.

. Вам нужно изменить значение memory_limit вВаш php.ini.Если вы пользуетесь виртуальным хостингом, потребуйте, чтобы провайдер увеличил его как минимум до 8 миллионов, лучше до 16 миллионов и более.Если они отрицают, убирайтесь оттуда: это нестандартный хостинг.

5 голосов
/ 19 июля 2010

вы пытаетесь выделить больше памяти, чем может обработать куча

установите свой предел выше, например xample

вверху скрипта ::

ini_set("memory_limit","10M");

или в вашем php.ini

memory_limit = 10M

это установит ваш memory_limit на 10M

1 голос
/ 20 июля 2010

ini_set(), вероятно, лучше, чем установить что-либо в php.ini.Если у вас есть конкретное приложение, которое, как вы знаете, требует , требует больше, чем стандартная память - тогда можно увеличить предел памяти для этого приложения.Вы хотите быть очень осторожными, открывая весь свой код, чтобы иметь более высокий предел памяти.

Тем не менее, если вы установите memory_limit в 0, ограничения памяти не будет, и скрипт будет использовать столько же памятипо мере необходимости (и система может дать это).

0 голосов
/ 20 июля 2010

Вот несколько предложений:

  1. отредактируйте ваш php.ini файл и измените строку, которая говорит memory_limit = .25M, чтобы она сказала

    memory_limit = 16M

  2. убедитесь, что вы звоните

    curl_close($c);

    последовательно.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...