Отсылка писем на большое количество адресов

svirol

Новичок
Отсылка писем на большое количество адресов

Есть программа, которая делает рассылку по адресам из базы (функция mail()).
При небольшом количестве адресов все работает нормально, а вот когда встает вопрос о рассылки нескольких тысяч писем, то выполнение прекращается по истечении некоторого времени (программа запускается через web-интерфейс).
Как сделать так, чтобы рассылка не прерывалась?
 

svirol

Новичок
А можно ли сделать так, чтобы запускался бы другой php скрипт с некоторыми параметрами, а данная программа выполнялась бы дальше при успешном запуске без ожидания конца рассылки? Как лучше?
 

begemot

Guest
Может повесь в cron скрипт, которая и будет рассылать то что надо, не надо тогда с max_execution_time что-то думать
 

svirol

Новичок
Автор оригинала: begemot
Может повесь в cron скрипт, которая и будет рассылать то что надо, не надо тогда с max_execution_time что-то думать
Да в том то и дело, что если бы нужна была бы рассылка в определенное время - все было бы сдорово.
Но рассылка должна запускаться вручную через Web-интерфейс. :(
 

M_Maniac

Guest
У меня была тоже такая беда, но при увеличении аттачей поставь set_time_limit(0); и она будет выполняться до предела.
 

svirol

Новичок
Автор оригинала: M_Maniac
У меня была тоже такая беда, но при увеличении аттачей поставь set_time_limit(0); и она будет выполняться до предела.
Я тоже так хотела, но дело в том, что редакторы - люди не понимающие в программировании и нетерпеливые. Могут сразу уйти на другую страницу, закрыть окно, посчитав, что выполнение завршилось или зависло, понажимать на Refresh... И что тогда?
Как бы сделать так, чтобы программа запускалась, выдавала истину, если прощесс нормально запущен и уже не зависела от внешних действий?
 

svirol

Новичок
Всем большое спасибо за ответы.
Не поможете ли еще? :(
У меня есть такая строка:
PHP:
exec("/usr/bin/php /opt/var/www/russiais/html/admin/report/send.php?id=$id&user=$user> /dev/null 2>/opt/var/www/russiais/html/admin/errsend &");
Все здорово работает, программа запускается, но вот ошибки не пишутся, даже если пути в строке в exec указаны неправильно.
В чем ошибка?
 

tony2001

TeaM PHPClub
нет, 2 - это поток ошибок как раз.
только я не уверен PHP-скрипт выводит ошибки в него.
 

svirol

Новичок
Автор оригинала: tony2001
нет, 2 - это поток ошибок как раз.
только я не уверен PHP-скрипт выводит ошибки в него.
То есть, я не могу проверить результаты выполнения запущенной программы и запустилась ли она вообще? Ведь именно для этого я и хотела перенаправить вывод ошибок в файл - сделать что-то вроде лога ошибок для данного процесса.
 

svirol

Новичок
И еще вопрос - можно ли проверить, что скрипт действительно запустился, если его выполнение не зависит от запускающего скрипта и может занять довольно много времени? А в запускающем скрипте желательно вывести сообщение, началось ли выполнение команды?
 

svirol

Guest
Читаю в manual:
For those who want to execute a .php script to run in the background, from
a .php web page...

exec("php script.php parameters 2>dev/null >&- <&-
>/dev/null &");

Where...
- php is the path to your php script executer (php has to be specifically
complied to be to do this)
- script.php is the script
- parameters are none or more parameters
- 2>dev/null redirects the stderr to a file
- <&- switches off the stdin
- >&- switches off the stdout
- >dev/null redirects all other output to the file dev/null
- & direct script to run in background
Отлично, пишу
PHP:
exec("/usr/local/bin/php /opt/var/www/russiais/html/admin/report/send.php id=$id user=$user 2>>/opt/var/www/russiais/html/admin/report/errsend  >&- <&- >>/opt/var/www/russiais/html/admin/report/logsend &", $ar, $res);
Все выполняется ($res=0), но когда для теста я ввожу неверный путь, все равно возвращается $res=0, то есть, что все нормально.
При этом в файл errsend пишется сообщение об оштбке, как и должно быть.
Можно ли определить, запустилась ли программа?
 
Сверху