PHP Неустранимая ошибка: допустимый размер памяти 33554432 байт исчерпан (пытался выделить 41007872 байта)

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

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

Затем я попытался добавить файл php.ini в корневой каталог (где находится index.php) с содержимым memory_limit = 64M которое тогда дало мне PDO Class, не найденные ошибки. Поэтому я добавил в расширения 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'); } } 

Related of "PHP Неустранимая ошибка: допустимый размер памяти 33554432 байт исчерпан (пытался выделить 41007872 байта)"

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

Установите memory_limit на 96M и назовите это днем!

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

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

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

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

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

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

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

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

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