Неустранимая ошибка PHP: исчерпан допустимый объем памяти 33554432 байта (попытался выделить 41007872 байта) - PullRequest
1 голос
/ 17 февраля 2010

Я получаю эту ошибку при попытке вызвать функцию mail ().

Я попытался добавить ini_set('memory_limit', '64m') в мой файл index.php - который включает в себя все остальные файлы () - но это не исправило.

Затем я попытался добавить файл php.ini в корневой каталог (где находится index.php) с содержимым memory_limit = 64M, которое затем дало мне Класс PDO не найден ошибки. Поэтому я добавил расширения PDO в файл php.ini, и теперь все ошибки исчезли.

Однако код все еще не работает. phpinfo () показывает, что ограничение памяти было увеличено до 64M, но моя функция mail () убивает выполнение страницы.

Как я могу это исправить? : /

Функция почты

private static function emailPassword(SafeString $email, $password)
{
   $subject  = 'Registration';
   $message  = 'Your password is: ' . $password . "\n";
   $headers  = 'From: registration@domain.com'     . "\r\n";
   $headers .= 'Reply-to: registration@domain.com' . "\r\n";

   $message = str_replace("\n.", "\n..", $message);  

   if (!mail($email->unsafeRaw(), $subject, $message, $headers))
   {
      throw new Exception('Failed');
   }
}

Ответы [ 4 ]

2 голосов
/ 17 февраля 2010

(33 554 432 байта) + (41 007 872 байта) = 71.1081543 мегабайта

Установите для memory_limit значение 96 МБ и называйте его днем!

0 голосов
/ 07 марта 2015

Символы, которые вы указали для замены, могут вызывать бесконечное зацикливание функции str_replace. Также не стоит играть с настройкой максимального ограничения памяти для php. Попробуйте другую строковую функцию. Может быть:

$message = preg_replace("\n.", "\n..", $message);

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

Надеюсь, это поможет.

0 голосов
/ 29 октября 2012

Если установка значения memory_limit выше и выше не работает, возможно, у вас где-то есть бесконечный цикл, который выделяет пространство памяти до достижения предела. Я не уверен, как сохранить функцию str_replace (), но она может создать здесь бесконечный цикл:

str_replace("\n.", "\n..", $message);

"\ п." заменяется на "\ n .." ==> "\ n .." может быть заменено на "\ n ..." ==> .... И вы используете все больше и больше памяти, пока не достигнете предела

0 голосов
/ 17 февраля 2010

Если я смотрю на класс SafeString, я не вижу метод unsafeRaw (), но есть метод toUnsafeRawString (). Вы пробовали отладку?

Кстати, зачем вам этот класс, если вы все равно используете необработанные значения? Это не имеет никакого смысла.

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