アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (5件)

回答1



sleepで実行を待ち合わせることはできます。

http://jp1.php.net/manual/ja/function.sleep.php

ただし、ブラウザからアクセスされたスクリプトで一定時間以上何も返さない状態を続けると、ブラウザがタイムアウトと判断してしまうので細かく区切って「何か」を出力しながら遅延させるなどの工夫は必要ですし、レンタルサーバなどでは実行時間の制限にひっかかるかもしれません(sleepを実行時間に含まないケースが多いとは思いますが、どういう運用かは確認しないとわかりません)。

回答2
「phpで」というのは無理です。システム側で行います(Unixならcron、WinOSならタスクで)。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

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

お礼日時:2013/05/29 17:43

cron使えば良いだけ。

この回答への補足

回答ありがとうございました。

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

補足日時:2013/05/29 17:45
    • good
    • 0

「PHPで~処理が発生」が「PHPが~自発的に処理を」という意味であれば、どちらも無理です。



一般的なPHPの使い方は、リクエストに対してレスポンスを返す形です。
なので、誰かがトリガーを引いてやらないと、何もアクションしません。

一般には、上記の「誰か」というのは「ブラウザ」で、それを使わず 定期自動処理を行いたいのであれば shimixさんが言っている cronなどにトリガーを引いてもらう事になります。

んー、ここまで書いて思ったけど、プログラムって何でも最初の一回は誰かがプログラムの実行を指示してやらないと動かないんだよねーとか思ったり。

この回答への補足

回答ありがとうございました。

>「PHPで~処理が発生」が「PHPが~自発的に処理を」という意味であれば、どちらも無理です。

>一般的なPHPの使い方は、リクエストに対してレスポンスを返す形です。
>なので、誰かがトリガーを引いてやらないと、何もアクションしません
・よく分かりました

・ではトリガーについて、例えばPOST送信してから10分経過後とか、10分以内にみたいな条件分岐(?)は出来るでしょうか?

補足日時:2013/05/29 17:48
    • good
    • 0

> ・ではトリガーについて、例えばPOST送信してから10分経過後とか、10分以内にみたいな条件分岐(?)は出来るでしょうか?



それが shimixさんが言っている sleepを使う方法です。
スリープ1分ぐらいでループさせればいいかと思います。
ただ、POST送信した側のブラウザが閉じている場合、PHP内部でどうなるかは分かりません。

↓俺が 昔 どっかから拾ってきて 使ってるタイムアウト防止コード。

set_time_limit(0);// 実行時間を制限しない
ob_end_clean();// 出力をバッファリングしない
print str_pad('',256);// IEのために256バイト空文字出力

んで、定期的に flush();

ただ、既に指摘されてる注意点があるので、オンライン上では使わないほうがいいかと思います。

無限ループ発生させると サーバー管理してるトコから 多分 怒られます。

いろいろ危険な要素をはらむので、素直に cronを使うことをお勧めします。
    • good
    • 1
この回答へのお礼

「回答」&「具体的なコード提示」ありがとうございます

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

お礼日時:2013/06/03 15:22

今はレンタルサーバでも「1分おき」にcronで起動させられるところが増えていると思います。



なので、現象発生→ファイル作成もしくはデータベース更新などでフラグを立てる→cronでフラグが立ってからの経過時間が一定時間を超えたら所定の処理をする。などといった感じがいいんじゃないでしょうか。

よほど「正確に10分」が必要でもない限りは、じっと遅延させる(実行を待ち合わせる)のは無意味です。10分以上で11分未満でよければcronで1分ごとにチェックする方がいいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/03 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!