当我尝试调用mail()函数时,我收到此错误。
我尝试将ini_set('memory_limit', '64m')
添加到我的index.php文件中 - 其中包含()所有其他文件 - 但它没有修复它。
然后我尝试将php.ini文件添加到根目录(index.php所在的位置)中,内容为memory_limit = 64M
,然后给了我 PDO Class not found 错误。所以我在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');
}
}
答案 0 :(得分:2)
(33 554 432字节)+(41 007 872字节)= 71.1081543兆字节
将memory_limit设置为96M,并将其称为一天!
答案 1 :(得分:0)
如果我查看SafeString类,我没有看到unsafeRaw()方法,但是有一个toUnsafeRawString()方法。你试过调试吗?
顺便说一句,如果您正在使用原始值,为什么要使用此类?这没有任何意义。
答案 2 :(得分:0)
如果设置你的memory_limit越来越高不起作用,也许你有一个无限循环的地方分配内存空间,直到达到极限。
我不确定如何保存str_replace()函数,但它可能在这里创建一个无限循环:
str_replace("\n.", "\n..", $message);
“\ n”。正在被替换为“\ n ..”==> “\ n ..”可能会被替换为“\ n ...”==> .... 在达到极限之前,你正在使用越来越多的内存
答案 3 :(得分:0)
您为替换提供的字符可能导致str_replace
函数无休止地循环。要设置php的最大内存限制也不是一个好主意。尝试其他字符串函数。也许:
$message = preg_replace("\n.", "\n..", $message);
preg_replace
对这些角色非常好,并且在不知道该做什么的情况下可能无法在许多无用的循环中运行。
我希望这会有所帮助。