2010-02-17 3 views
1

mail() 함수를 호출 할 때이 오류가 발생합니다.PHP 치명적 오류 : 메모리 크기가 33554432 바이트로 소모되었습니다 (41007872 바이트를 할당하려고 시도)

내 index.php 파일에 ini_set('memory_limit', '64m')을 추가하려고 시도했습니다. - 다른 모든 파일을 include()하지만 수정하지 않았습니다.

는 그때 그때 나에게 PDO 클래스를 찾을 수 없습니다 오류를 준 내용 memory_limit = 64M에 (의 index.php가있는 경우) 루트 디렉토리에 php.ini의 파일을 추가했습니다. 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

'mail' 기능은 아마도 당신의 문제가 아닙니다. 그것은 이미 전체 배럴의 마지막 드롭일지도 모릅니다. 나머지 코드에서 문제를 찾아보십시오. – deceze

+1

40MB 할당 시도 ... unsafeRaw() 메소드는 무엇을하고 있습니까? – Arkh

답변

2

(33 554 432 바이트) + (41 007 872 바이트) = 71.1081543 메가 바이트

설정 96M로 memory_limit를하고 오늘은 이만!

0

SafeString 클래스를 보면 unsafeRaw() 메서드가 표시되지 않지만 toUnsafeRawString() 메서드는 있습니다. 디버깅을 시도 했습니까?

btw 어쨌든 원시 값을 사용하는 경우 왜이 클래스를 사용하겠습니까? 그건 말이 안되요.

0

memory_limit 이상을 설정해도 작동하지 않는 경우 한계에 도달 할 때까지 메모리 공간을 할당하는 어딘가에 무한 루프가있을 수 있습니다.
나는() 함수이지만, 여기에 무한 루프를 만들 수있는 않는 str_replace를 저장하는 방법을 잘 모르겠어요 ". \ n을"

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

을 "\ n .."==> "\ n .."은 "\ n ..."으로 바꿀 수 있습니다. ==> .... 그리고 당신이 limit

0

교체 용으로 제공 한 문자로 인해 str_replace 함수가 끝없이 반복적으로 작동 할 수 있습니다. PHP 용 최대 메모리 제한 설정으로 놀아 보는 것도 좋지 않습니다. 다른 문자열 함수를 사용해보십시오. 미정 :

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

preg_replace는 문자가 아주 좋은이며, 무엇을 알고 있기없이 많은 쓸모없는 루프에서 실행되지 않을 수 있습니다.

이 정보가 도움이되기를 바랍니다.

관련 문제