• 締切済み

ボタンを押してから5分後にメールが送信される・・。

お世話になります。 わたくしPHP歴1ヶ月の者です。 ボタンを押してから5分後にメールが送信される・・。 そのような場合は、どの関数をどのように使用すれば良いのでしょうか。 時間をカウントしてから稼動するタイマーのような仕組みについてのご質問です。 分かりにくくて申し訳ありません。 初歩的な質問だとも思うので少々恐縮ですが、 よろしくお願いいたします。

みんなの回答

回答No.5

メーリングリストなんかでスケジュールかけて対象者のみにcronで送ったりしてますが、もしかすると、この質問はそういうことだったのでしょうか?(でも5分毎に実行するのですか?サーバ管理者に怒られそう) で、解答ですが、 phpもソースとしても動かせますので、submit時にバックグラウンドで送信さえるだけのソース動かせばいいのです。 それが面倒だと感じるのでしたら、 system ("$src > /dev/null &"); ってう感じのソースを埋め込んで、別プロセスで動かした先で遅らせればいいのではないかと・・・ #動作確認してみたら、phpのsystem関数はUNIXコマンドのsystemより面倒な気がしました・・・

  • taba
  • ベストアンサー率61% (349/567)
回答No.4

ボタンを押してから5分という狙いがよく分かりませんので、ちょっとずれるかもしれません。 #2の方がおっしゃっているcronで処理するというのは、よく使われる方法です。crontabを書き換えるのではなく、特定のファイルにキューがあればメールを送るというプログラムを書き、それを定期的に走らせるわけです(phpで書く場合は、cgi版のインストールが必要かな)。 ボタンを押したときの動作は、その特定のファイルにメールを送るキューを入れるということになります。 ただ、この場合、5分単位で処理するプログラムをcronで走らせると、その直前に登録されたメールは5分たたずに出ていきます。 登録時間も記録してそれを見ながらメールを出すかどうか判断するという手もありますが、普通そこまでコントロールする必要が無いのでやらないと思います。

回答No.3

CRONは駄目でしょう。というか駄目ですよ。 crontabで書き換えていくなんて、非現実的です。 ATコマンドもどうかと思いますが…time()関数で時間をとって5分後に実行するコマンドを流しておくというのは、実行可能でしたら悪くはないと思います。 sleepでwebページに影響が出ないようするにするには、フォームをクリックしたらphpスクリプトを実行するようにして、そこでディレイすればいいのです。

hachimitsu2000
質問者

お礼

DRAGON_TAILさまたびたびありがとうございます! >sleepでwebページに影響が出ないようするにするには、フォームをクリックしたらphpスクリプトを実行するようにして、そこでディレイすればいいのです。 の >クリックしたらphpスクリプトを実行する のちに >ディレイする とはどのようなソースになるのでしょうか。 お時間が許されましたら教えていただけると幸いです。 現在はsleep関数がそのまま書いてありますので、そのページが開くと5分間読み込み状態が続いてしまい、その後にメールが送信されてきます。 いまいちイメージしきれていないわたくしめに ご指導くださいませ。

  • vitadai
  • ベストアンサー率75% (6/8)
回答No.2

システム関数でCRONに登録するか、atコマンドで時間を指定するかですね。 ただ、これはサーバのシステムにより指定方法が違ってくるので、分からない場合はサーバ管理者に問い合わせるのが良いと思います。 参考にatコマンドのページを出しておきます。

参考URL:
http://homepage2.nifty.com/cs/linux_command/command/at.html
回答No.1

sleep関数で遅延処理ができますよ。

参考URL:
http://www.php.net/manual/ja/function.sleep.php
hachimitsu2000
質問者

お礼

DRAGON_TAILさまありがとうございます。 たいへん参考になります! sleep関数を下記のように30秒停止してみたのですが、 $mail_time=30; sleep($mail_time); そのページの表示自体も30秒停止してしまうのですね。 画面の表示や他の関数には影響を与えず、 指定した関数(今回の場合mail関数だけ)だけをsleepさせることもできるのでしょうか。 ご指導お願いいたします!

関連するQ&A

専門家に質問してみよう