2011-09-07 5 views
0

백그라운드에서 구독자에게 몇 백 개의 이메일을 보내려면 PHP 루프를 실행하는 방법이 있는지 궁금합니다. 내 목표는 뉴스 레터를 포맷하고 보내기를 클릭 한 다음 브라우저를 닫거나 페이지를 변경하는 것입니다. 물론 전자 메일을 보내는 실제 프로세스는 백그라운드에서 실행되며 브라우저가 닫히면 중단되지 않습니다.cron없이 백그라운드로 메일 보내기

나는 이것이 MySQL이나 텍스트 파일에 저장된 큐에서 읽는 cron 작업으로 만들어 질 수 있다는 것을 알고있다. 그러나 이런 식으로, 오랜 기간 대기열이 없다하더라도 cron은 항상 실행되어서 대기열 ...

나는이 기능을 Pommo (https://github.com/soonick/poMMo)라는 스크립트에서 보았지만 어떻게 완료되었는지 이해하지 못했습니다.

누구나 아이디어가 있습니까?

답변

0

질문에 덧글을 추가하려고했으나 형식화하고 예제를 줄 충분한 공간이 없었습니다. 데이터베이스 나 파일로 보내려면 모든 이메일을로드 -

1 : 여기

내가 작동 할 수 믿는 생각이다.

2 - 웹 응용 프로그램에서 전자 메일을 보내기 위해 버튼을 클릭하십시오. 그러면 Ajax 요청이 서버에 제출됩니다. 특정 기간 내에 보내려는 전자 메일의 수를 정의 할 수 있습니다. 대부분의 호스트는 매시간 전송할 수있는 전자 메일 수에 제한이 있음을 기억하십시오.

3 - Ajax 요청을 수신하고 정의한 매개 변수 내에서 모든 이메일을 전송하는 PHP 스크립트를 작성하십시오.

4 - 나는 PHP 스크립트가 전체 목록을 통해 실행되고 모든 전자 메일을 보내기가 완료 될 때까지 반환하지 않기 때문에 웹 브라우저를 죽일 수 있다고 생각합니다.

위의 내용이 효과가있을 수 있지만 결코 그렇게 할 수는 없습니다. 나는 위에서 언급 한 것과 같이 cronjob을 사용할 것입니다. 당신의 cronjob은 보낼 이메일이 있는지 없는지 확인 만하면됩니다. 자원 집약적 인 것은 아닙니다.

위의 아이디어를 구현하기로 결정한 경우 알려 주시기 바랍니다. 그것이 효과가 있을지 궁금하다.

행운을 빈다.

+0

php 스크립트가 ignore_user_abort (true)와 비슷한 것을 가지고 있다면 브라우저가 닫히면 죽을 것이라고 생각합니까? – fana

+0

@fana - PHP 매뉴얼에서 - "클라이언트 연결을 끊어서 스크립트를 중단 시킬지 여부를 결정할 수 있습니다." 여기서 전체 내용을 읽을 수 있습니다 -> http://php.net/manual/en/features.connection-handling.php – jdias

+0

그 페이지의 주석에 꽤 흥미로운 코드가 있습니다. 나는 그들을 시험해야 할 것이다. – fana

0
나는이 의 MySQL이나 텍스트 파일에 저장 큐에서 읽는 cron 작업으로 만들 수 있습니다 알고

하지만,이 방법은, 긴 기간에 대한 큐가없는 경우에도 크론은 항상 실행됩니다 대기열을 찾고 있습니다 ...

크론의 목적을 훨씬 능가합니다. 예를 들어 매 15 분마다 실행되는 작업을 작성하고 전송해야하는 메일을 대기열에서 확인해야합니다. 메일이 없으면 스크립트가 종료되고 15 분 후에 다시 실행됩니다.

전송할 메일이있는 경우 전송을 시작하기 전에 행을 업데이트하여 전송을 시작하기 때문에 15 분 이상 걸리면 다른 스크립트 인스턴스가 동일한 메일을 보내지 않습니다.

+0

나는 당신이 맞을 것이라고 생각합니다.이 시스템을 맞춤형 CSM에 추가 할 생각으로 모든 설치에서 cron 작업을 만들고 싶지 않았습니다 ... 나는 또한 즉시이 프로세스를 시작하고 X 분 정도 기다려야 할 위험이 있습니다. 시작 ... – fana

0

대기열 시스템이 필요합니다. 예 : linux 용 Beanstalkd, PHP로 물건을 먹을 것입니다.

+0

이것은 정말 좋지만 명령 줄 또는 일부 장고 인터페이스를 통해 실행해야합니다. 나는 그것이 웹 인터페이스에 의해 촉발 될 필요가있다. – fana

+0

당신은 "php interface"에서이를 트리거해야합니다 – pduersteler