ホームページ  >  記事  >  バックエンド開発  >  PHPスケジュールタスクignore_user_abortの使用例

PHPスケジュールタスクignore_user_abortの使用例

WBOY
WBOYオリジナル
2016-07-25 08:58:491109ブラウズ
  1. //phpスケジュールされたタスク
  2. //by bbs.it-home.org
  3. ignore_user_abort() // 関数設定がクライアントから切断されるかどうかはスクリプトの実行を終了します
  4. ; set_time_limit( 0); // スクリプトの実行時間を無限に設定するには
  5. $interval=30;
  6. do{
  7. $fp = fopen('text3.txt','a');
  8. fwrite($fp, 'test' );
  9. fclose($fp);
  10. sleep($interval); // 関数はコードの実行を数秒遅延させます
  11. }while(true);
  12. ?>
コードをコピーします

まず、プログラムを実行してからページを閉じます。プログラムはまだ実行中で、テストは 30 秒ごとに text3.txt ファイルに入力されます。

最後に、PHPマニュアルの関連知識を紹介しましょう:

1.接続処理:

PHP 内部では、システムは接続ステータスを維持しており、そのステータスには 3 つの状況が考えられます。

0 – 通常 1 – ABORTED (異常終了) 2 – タイムアウト (タイムアウト)

NORMAL状態でPHPスクリプトが正常に実行されていれば接続は有効です。リモート クライアントが切断されると、ABORTED ステータス フラグがオンになります。リモート クライアント接続の中断は、通常、ユーザーが [STOP] ボタンをクリックしたことによって発生します。接続時間が PHP の制限時間を超えると、TIMEOUT ステータス フラグがオンになります。

クライアントが切断されたときにスクリプトを終了する必要があるかどうかを決定できます。スクリプトの出力を受け入れるリモート ブラウザがない場合でも、スクリプトを完全に実行すると便利な場合があります。デフォルトでは、リモート クライアント接続が失われたときにスクリプトが終了します。このプロセスは、php.ini のignore_user_abort によって、または Apache .conf 設定の対応する "php_valueignore_user_abort" 関数およびignore_user_abort() 関数によって制御できます。 PHP がユーザーの中断を無視するように指示されていない場合、 register_shutdown_function() によってシャットダウントリガー関数が設定されていない限り、スクリプトは中断されます。このクローズ トリガー関数により、リモート ユーザーが STOP ボタンをクリックし、スクリプトがデータを再度出力しようとすると、PHP は接続が中断されたことを検出し、クローズ トリガー関数を呼び出します。

スクリプトは、内蔵のスクリプト タイマーによって中断される場合もあります。デフォルトのタイムアウト制限は 30 秒です。この値は、php.ini で max_execution_time を設定するか、Apache .conf 設定の対応する「php_value max_execution_time」パラメータまたは set_time_limit() 関数を設定することで変更できます。カウンタがタイムアウトすると、上記の接続中断状況と同様にスクリプトが終了し、事前に登録されたシャットダウン トリガー関数もこの時点で実行されます。シャットダウン トリガー関数では、connection_status() 関数を呼び出すことで、タイムアウトによってシャットダウン トリガー関数が呼び出されたかどうかを確認できます。タイムアウトによりシャットダウントリガー関数が呼び出された場合、関数は 2 を返します。

注: ABORTED ステータスと TIMEOUT ステータスが同時に有効になる場合があります。これは、PHP にユーザー終了アクションを無視するように指示する場合に可能です。 PHP はユーザーが切断されたことを認識しますが、スクリプトはまだ実行中です。実行時間制限に達すると、スクリプトは終了し、設定されたシャットダウン トリガー関数も実行されます。この時点で、関数 connection_status() が 3 を返すことがわかります。

以上、PHP のスケジュールされたタスクの実装方法を皆さんが理解し、習得するのに役立つことを願っています。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。