前提・実現したいこと
PHPでメールの一斉配信システムを作っており、送信日時を指定したメールが、その日時を過ぎた時点で送信される機能を実装しようとしております。
発生している問題・エラーメッセージ
送信用のプログラムをphp作成しましたが、そのプログラムを定期的に作動させる仕組みをどのように実現すれば良いか判らず詰まっています。
補足情報
送信用のファイルは、以下のような形で、5分ごとにリロードと処理を繰り返します。ブラウザでファイルを開いている間は半永久的に動作しますが、当然ブラウザを閉じると処理が止まってしまいます。
- ブラウザでsend.phpファイルを開く
- DB(MySQL)からメール情報を取得し、送信予約フラグの立ったデータがあれば現在日時と比較する
- 現在日時 > 予約日時 であればメール送信し、DBのメール情報にて送信予約フラグを解除する
- 予約日時 > 現在日時 であれば5分間sleepの後にリロードする
ブラウザを閉じても、または ブラウザでファイルを開かなくても動作が継続する方法はあるのでしょうか?
また、本件について調べる中で、cronというものの存在を知りました。これを使うことで実現できそうではありますが、学習の敷居が高く感じられることと、システムの早期完成を優先したいため、phpで実現する方法があるのであれば知りたいと考えています。
勉強不足でして、質問に至らない点が多いかと思いますが、ご教示いただけますと幸いです。
> システムの早期完成を優先したい
という要件を満たせそうな「ブラウザで開くことで半永久的に動作します」で解決できないこと、あるいは困っていることは何ですか。
コメントありがとうございます。「半永久的に動作する」と書かせていただきましたが、ブラウザを閉じれば動作が止まってしまいますので、ブラウザを閉じても動く または、ブラウザでファイルを開かなくても動作し続ける方法があれば知りたいです。
なぜ、納期が迫っている状況で、意図どおり動作するコードが完成しているのに、ブラウザを閉じようとするのかわかりません。閉じない、という運用前提でリリースして時間を稼いで cron を覚えればいいだけではないですか。
ご回答ありがとうございます。
>ブラウザで開いているということは、画面表示がなされているのですよね。
質問内容が不十分ですみません。ブラウザでファイルを開いて実行する方法しか知らなかったため、ブラウザで開いておりましたが、画面表示は必要無いです。
ブラウザ以外の、php関数等でファイルを実行する方法があるのでしょうか?
>閉じない、という運用前提でリリースして時間を稼いで cron を覚えればいいだけではないですか。
本件は、システムごと顧客に納品し、顧客のサーバ上に設置予定のため、ブラウザを開いたままの運用はできないと考えています。