2010-02-17 59 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非常好這樣的角色,在許多無用的循環不知道該怎麼辦,可能無法運行。

我希望這會有所幫助。

相關問題