• ベストアンサー

PHPで一定時間が経過すると処理が発生、は可能?

■質問1 ・PHPで、一定時間が経過すると処理が発生みたいなことはできるでしょうか? ■質問2 ・PHPで、指定時刻になったら処理が発生みたいなことはできるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

今はレンタルサーバでも「1分おき」にcronで起動させられるところが増えていると思います。 なので、現象発生→ファイル作成もしくはデータベース更新などでフラグを立てる→cronでフラグが立ってからの経過時間が一定時間を超えたら所定の処理をする。などといった感じがいいんじゃないでしょうか。 よほど「正確に10分」が必要でもない限りは、じっと遅延させる(実行を待ち合わせる)のは無意味です。10分以上で11分未満でよければcronで1分ごとにチェックする方がいいです。

re97
質問者

お礼

回答ありがとうございました。 参考になりましたー

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

> ・ではトリガーについて、例えばPOST送信してから10分経過後とか、10分以内にみたいな条件分岐(?)は出来るでしょうか? それが shimixさんが言っている sleepを使う方法です。 スリープ1分ぐらいでループさせればいいかと思います。 ただ、POST送信した側のブラウザが閉じている場合、PHP内部でどうなるかは分かりません。 ↓俺が 昔 どっかから拾ってきて 使ってるタイムアウト防止コード。 set_time_limit(0); // 実行時間を制限しない ob_end_clean(); // 出力をバッファリングしない print str_pad('',256); // IEのために256バイト空文字出力 んで、定期的に flush(); ただ、既に指摘されてる注意点があるので、オンライン上では使わないほうがいいかと思います。 無限ループ発生させると サーバー管理してるトコから 多分 怒られます。 いろいろ危険な要素をはらむので、素直に cronを使うことをお勧めします。

re97
質問者

お礼

「回答」&「具体的なコード提示」ありがとうございます >POST送信した側のブラウザが閉じている場合、PHP内部でどうなるかは分かりません >ただ、既に指摘されてる注意点があるので、オンライン上では使わないほうがいいかと思います ・参考になりましたー

すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

「PHPで~処理が発生」が「PHPが~自発的に処理を」という意味であれば、どちらも無理です。 一般的なPHPの使い方は、リクエストに対してレスポンスを返す形です。 なので、誰かがトリガーを引いてやらないと、何もアクションしません。 一般には、上記の「誰か」というのは「ブラウザ」で、それを使わず 定期自動処理を行いたいのであれば shimixさんが言っている cronなどにトリガーを引いてもらう事になります。 んー、ここまで書いて思ったけど、プログラムって何でも最初の一回は誰かがプログラムの実行を指示してやらないと動かないんだよねーとか思ったり。

re97
質問者

補足

回答ありがとうございました。 >「PHPで~処理が発生」が「PHPが~自発的に処理を」という意味であれば、どちらも無理です。 >一般的なPHPの使い方は、リクエストに対してレスポンスを返す形です。 >なので、誰かがトリガーを引いてやらないと、何もアクションしません ・よく分かりました ・ではトリガーについて、例えばPOST送信してから10分経過後とか、10分以内にみたいな条件分岐(?)は出来るでしょうか?

すると、全ての回答が全文表示されます。
  • iioi
  • ベストアンサー率26% (22/84)
回答No.2

cron使えば良いだけ。

re97
質問者

補足

回答ありがとうございました。 cronってapacheのモジュール(?)みたいな認識でいるのですが、PHPと連動させることは出来るでしょうか?

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

回答1 sleepで実行を待ち合わせることはできます。 http://jp1.php.net/manual/ja/function.sleep.php ただし、ブラウザからアクセスされたスクリプトで一定時間以上何も返さない状態を続けると、ブラウザがタイムアウトと判断してしまうので細かく区切って「何か」を出力しながら遅延させるなどの工夫は必要ですし、レンタルサーバなどでは実行時間の制限にひっかかるかもしれません(sleepを実行時間に含まないケースが多いとは思いますが、どういう運用かは確認しないとわかりません)。 回答2 「phpで」というのは無理です。システム側で行います(Unixならcron、WinOSならタスクで)。

re97
質問者

お礼

回答ありがとうございました。 >sleepで実行を待ち合わせることはできます。 >ただし、ブラウザからアクセスされたスクリプトで一定時間以上何も返さない状態を続けると、ブラウザがタイムアウトと判断してしまうので細かく区切って「何か」を出力しながら遅延させるなどの工夫は必要です ・参考になりましたー

すると、全ての回答が全文表示されます。

関連するQ&A