メッセージを1回だけ送信したいので、cronジョブを使用したくないとおっしゃいましたが、これは、この種のタスク用にcronジョブが作成される方法を誤解しています。
多くのユーザーがさまざまな時点で送信される多くのメッセージを作成している状況を考えてみます。
これらのメッセージごとに、サーバー上でPHPプログラムを常に実行する必要はありません。sleep()
サーバーリソースがすべてその期間だけ使用されていたとしても、サーバーリソースを浪費することになります。
代わりに、cronジョブを使用して、短命のPHPプログラムを1分に1回(または適切な間隔で)実行します。
あなたのメッセージ作成プログラムは、メッセージを実際に送信するようには書かれていません。代わりに、送信する必要のある時間とともに、データベースに挿入します。
一方、cronjob PHPプログラムは、このデータベースを毎分スキャンして、送信する予定であるがまだ送信されていないメッセージがあるかどうかを確認します。次に、それらのメッセージを送信し、DB上で「送信済み」としてマークします。
これはこの種のことを書くための標準的な方法なので、人々があなたにそれを勧めているのは当然のことです。
このようにすることは、システム上で必要以上にプログラムを実行することがないことを意味します。どちらのPHPプログラムも、すばやく機能して終了します。つまり、誰もそれらを待ち続けることはありません。
また、はるかに堅牢になります。サーバーを再起動する必要がある場合を想像してみてください。たくさんのPHPプログラムを何時間も実行して、メッセージを送信する瞬間を待っていると、それらはすべて失われます。一方、メッセージをDBに保存した場合、サーバーが再起動されると、cronジョブはそれらを検出し、正しく送信します。