- 締切済み
ボタンを押してから5分後にメールが送信される・・。
お世話になります。 わたくしPHP歴1ヶ月の者です。 ボタンを押してから5分後にメールが送信される・・。 そのような場合は、どの関数をどのように使用すれば良いのでしょうか。 時間をカウントしてから稼動するタイマーのような仕組みについてのご質問です。 分かりにくくて申し訳ありません。 初歩的な質問だとも思うので少々恐縮ですが、 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- DRAGON_TAIL
- ベストアンサー率48% (27/56)
メーリングリストなんかでスケジュールかけて対象者のみにcronで送ったりしてますが、もしかすると、この質問はそういうことだったのでしょうか?(でも5分毎に実行するのですか?サーバ管理者に怒られそう) で、解答ですが、 phpもソースとしても動かせますので、submit時にバックグラウンドで送信さえるだけのソース動かせばいいのです。 それが面倒だと感じるのでしたら、 system ("$src > /dev/null &"); ってう感じのソースを埋め込んで、別プロセスで動かした先で遅らせればいいのではないかと・・・ #動作確認してみたら、phpのsystem関数はUNIXコマンドのsystemより面倒な気がしました・・・
- taba
- ベストアンサー率61% (349/567)
ボタンを押してから5分という狙いがよく分かりませんので、ちょっとずれるかもしれません。 #2の方がおっしゃっているcronで処理するというのは、よく使われる方法です。crontabを書き換えるのではなく、特定のファイルにキューがあればメールを送るというプログラムを書き、それを定期的に走らせるわけです(phpで書く場合は、cgi版のインストールが必要かな)。 ボタンを押したときの動作は、その特定のファイルにメールを送るキューを入れるということになります。 ただ、この場合、5分単位で処理するプログラムをcronで走らせると、その直前に登録されたメールは5分たたずに出ていきます。 登録時間も記録してそれを見ながらメールを出すかどうか判断するという手もありますが、普通そこまでコントロールする必要が無いのでやらないと思います。
- DRAGON_TAIL
- ベストアンサー率48% (27/56)
CRONは駄目でしょう。というか駄目ですよ。 crontabで書き換えていくなんて、非現実的です。 ATコマンドもどうかと思いますが…time()関数で時間をとって5分後に実行するコマンドを流しておくというのは、実行可能でしたら悪くはないと思います。 sleepでwebページに影響が出ないようするにするには、フォームをクリックしたらphpスクリプトを実行するようにして、そこでディレイすればいいのです。
- vitadai
- ベストアンサー率75% (6/8)
システム関数でCRONに登録するか、atコマンドで時間を指定するかですね。 ただ、これはサーバのシステムにより指定方法が違ってくるので、分からない場合はサーバ管理者に問い合わせるのが良いと思います。 参考にatコマンドのページを出しておきます。
- DRAGON_TAIL
- ベストアンサー率48% (27/56)
sleep関数で遅延処理ができますよ。
お礼
DRAGON_TAILさまありがとうございます。 たいへん参考になります! sleep関数を下記のように30秒停止してみたのですが、 $mail_time=30; sleep($mail_time); そのページの表示自体も30秒停止してしまうのですね。 画面の表示や他の関数には影響を与えず、 指定した関数(今回の場合mail関数だけ)だけをsleepさせることもできるのでしょうか。 ご指導お願いいたします!
お礼
DRAGON_TAILさまたびたびありがとうございます! >sleepでwebページに影響が出ないようするにするには、フォームをクリックしたらphpスクリプトを実行するようにして、そこでディレイすればいいのです。 の >クリックしたらphpスクリプトを実行する のちに >ディレイする とはどのようなソースになるのでしょうか。 お時間が許されましたら教えていただけると幸いです。 現在はsleep関数がそのまま書いてありますので、そのページが開くと5分間読み込み状態が続いてしまい、その後にメールが送信されてきます。 いまいちイメージしきれていないわたくしめに ご指導くださいませ。