PHP скрипт медленно при отправке электронной почты - PullRequest
1 голос
/ 01 ноября 2011

Я запускаю этот сценарий, он подходит для одного контекста, но когда я пробую это на 4 получателях, он не работает, просто показывая эту ошибку:

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);
    }   
}

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Сколько совпадающих строк в таблице newsletter?

Кроме того, в вашем коде есть логическая ошибка - он будет добавлять новое поле To: каждый раз через цикл, поэтомупервое письмо будет отправлено по адресу:

To: user1@example.com

, а второе будет отправлено по адресу:

To: user1@example.com
To: user2@example.com

В результате user1@example.com получит одно сообщение для каждого человека в вашем списке рассылкиuser2@example.com получаю на одно сообщение меньше и так далее.Не делай этого.:)

1 голос
/ 01 ноября 2011

По умолчанию PHP-скрипты запускаются в течение 30 секунд и затем останавливаются.Это значение контролируется значением max_execution_time в php.ini.Вы можете переопределить это значение в текущем скрипте, вызвав функцию set_time_limit().Каждый раз, когда вы вызываете set_time_limit(), таймер выполнения скрипта начинается с нуля.Таким образом, вы можете поместить его в цикл 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);
}
1 голос
/ 01 ноября 2011

поставить под строкой в ​​начале вашей функции.

set_time_limit(0);

это помогает запустить скрипт, который должен выполняться в течение неизвестного времени.

...