2011-11-01 3 views
1

를 전송하는 동안 그것은 하나의 문맥 괜찮하지만 난 그냥이 오류 표시 작동하지 않는 4받는 사람에서이 작업을하려고하면이 코드를 향상시킬 수있는 방법PHP 스크립트 느린 이메일

Fatal error: Maximum execution time of 30 seconds exceeded in D:\Hosting\8011955\html\admin\newsletter.php on line 60 

을 ? 난 그냥 더 여기

(200) 코드보다 이메일을 보낼 :

if(!(is_array($errors))) 
{ 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
$headers .= "From: \"".$from_name."\" <".$from_email.">\n"; 

    $query="SELECT email From newsletter WHERE visible='1'"; 
    $result=mysql_query($query) or mysql_error(); 
    while($rowdata=mysql_fetch_array($result)) 
    { 
     $headers .= "To: \"".$to_name."\" <".$rowdata['email'].">\n";  
      mail($rowdata['email'], "$sub",$message, $headers); 
    } 
} 
+1

whats'Line 60'? – Neal

+0

그리고 로그가 말하는 것은 무엇입니까? –

+2

'mail()'은 느린 기능입니다. [PHPMailer] (http://phpmailer.worxware.com) 또는 [Swiftmailer] (http://swiftmailer.org)와 같이 더 나은 것으로 전환하거나 덤핑하지 않고 속도를 향상시킬 수 없습니다. –

답변

1

기본적으로 PHP 스크립트는 30 초 동안 실행 된 다음 중지됩니다. 이 값은 php.ini의 max_execution_time 값에 의해 제어됩니다. set_time_limit() 함수를 호출하여 현재 스크립트 내에서이 값을 무시할 수 있습니다. set_time_limit()에 전화 할 때마다 스크립트 실행 타이머가 0에서 시작됩니다. 따라서 루프를 while {} 루프 안에 넣으면 스크립트가 필요한만큼 많은 시간을 줄 수 있습니다.

while($rowdata=mysql_fetch_array($result)) 
{ 
    set_time_limit(30); // Reset script timer and give script 30 seconds to send the next email 
    $headers .= "To: \"".$to_name."\" <".$rowdata['email'].">\n";  
    mail($rowdata['email'], "$sub",$message, $headers); 
} 
2

newsletter 테이블에 얼마나 많은 일치하는 행입니까?

To: [email protected] 

그리고 두 번째는 것입니다 : 그것은 루프를 통해 새로운 To: 필드마다 추가됩니다, 그래서 첫번째 메일로 이동합니다 - 여담으로

는 코드에서 논리적 인 오류가있다

To: [email protected] 
To: [email protected] 

[email protected], 당신의 메일 링리스트에있는 모든 사람을 위해 하나의 메시지를 수신 [email protected] 등등 한 적은 메시지를 수신하고, 발생합니다 :로 이동합니다. 이러지 마. :)

+1

조심하십시오. ! 반복 할 때마다 "종료"를 플러시하지 않으면 의도하지 않은 수신자에게 이메일이 전송 될 수 있습니다. 오래된 FMail 라이브러리에서 이와 관련된 알려진 문제점이있었습니다. –

+1

오오, 고마워. 너를 잡았어. 내가 어떻게 코드를 개선 할 수 있는지 제안 해 줄래? 그래서 나는 100 명의 친구에게 이메일을 보낼 수있다 ... – xofth

1

기능 시작 부분에 줄을 넣으십시오.

set_time_limit(0); 

이것은 알 수없는 시간 동안 실행해야하는 스크립트를 실행하는 데 도움이됩니다.