2010-02-17 121 views
1

我在尝试调用mail()函数时收到此错误。PHP致命错误:允许内存大小为33554432字节耗尽(试图分配41007872字节)

我试着将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: [email protected]'  . "\r\n"; 
    $headers .= 'Reply-to: [email protected]' . "\r\n"; 

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

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

“邮件”功能可能不是你的问题,它可能只是已经满桶的最后一滴。尝试在代码的其余部分找到问题。 – deceze 2010-02-17 04:29:53

+1

试图分配40MB ...你的unsafeRaw()方法在做什么? – Arkh 2010-02-17 11:08:40

回答

2

(33个554 432字节)+(41个007 872字节)= 71.1081543兆

设置你的memory_limit的,以9600和收工!

0

如果我看看SafeString类,我没有看到unsafeRaw()方法,但有一个toUnsafeRawString()方法。你尝试过调试吗?

btw为什么你会使用这个类如果你使用的是原始值呢?这没有任何意义。

0

如果您设置memory_limit的走高不工作,也许你有无限循环的地方,直到达到其极限分配内存空间。
我不知道如何保存str_replace()函数的功能是,但它可能会在此创建无限循环:“\ n”

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

被替换为“\ n ...” ==>“\ n ..”可能被替换为“\ n ...” ==> .... 直到你达到你正在使用越来越多的内存限制

0

您提供的用于替换的字符可能会导致str_replace函数无休止地循环。要设置php的最大内存限制,不是一个好主意。尝试其他字符串函数。也许:

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

preg_replace非常好这样的角色,在许多无用的循环不知道该怎么办,可能无法运行。

我希望这会有所帮助。

相关问题