PHP でスケジュールされたタスクを実装する 5 つの方法

藏色散人
リリース: 2023-04-09 18:02:02
転載
10257 人が閲覧しました

スケジュールされた実行タスクは、ドキュメントの定期的な公開、ジャンク情報の定期的なクリーンアップなど、Web サイトにとって比較的重要なタスクです。今日の Web サイトのほとんどは PHP 動的言語を使用して開発されており、PHP の実装に関する決定はありません。 Java や .Net などの AppServer の概念と http プロトコルはステートレス プロトコルです。PHP はユーザーによってのみトリガーされて呼び出すことができます。呼び出された後は自動的にメモリから抜け出し、常駐メモリはありません。

推奨: 「php ビデオ チュートリアル

PHP を使用してスケジュールされたタスクを実装する必要がある場合は、次の解決策があります:

1. シンプルで直接的で無謀なタイプ

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
ini_set(&#39;memory_limit&#39;,&#39;512M&#39;); // 设置内存限制
$interval=60*30;// 每隔半小时运行
do{
  //ToDo 
  sleep($interval);// 等待5分钟
}
while(true);
ログイン後にコピー

欠点: 一度起動すると PHP ホストを終了しない限り制御できないため、ハッカーでない限りこの方法は使用しないでください。

2. シンプルな制御可能なタイプ

config.php

<?php
return 1;
?>
ログイン後にコピー

cron.php

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
  $run = include &#39;config.php&#39;;
  if(!$run) die(&#39;process abort&#39;);
   
  //ToDo
  sleep($interval);// 等待5分钟
}
while(true);
ログイン後にコピー

config の return 0 を変更してプログラムを停止します。 php. 実行可能な方法は、config.php ファイルと特別なフォームを操作し、設定用の HTML ページを通じていくつかの変数を設定することです。

欠点: システム リソースを消費し、長時間実行すると、時には、予期せぬ危険が隠れていることもあります。たとえば、メモリ管理の問題など。

3. シンプルに改良された

<?php
$time=15;
$url="http://".$_SERVER[&#39;HTTP_HOST&#39;].$_SERVER[&#39;REQUEST_URI&#39;];
/*
  function
*/
sleep($time);
file_get_contents($url);
?>
ログイン後にコピー

phpスクリプトスリープは、一定時間経過後に自身にアクセスすることで実行を継続します。まるで駅伝のように..これにより、各 PHP スクリプトの実行時間が長すぎないことが保証されます。time_out によって制限されません。

PHP ファイルの各サイクルは独立して実行されるため、このメソッドは time_out 制限を回避しますただし、プロセスを終了できるように、上記のように制御コード cofig.php を追加するのが最善です。

4. サーバーのスケジュールされたタスク

UnixPlatform

Unix システムを使用している場合は、PHP スクリプトの先頭に特別なコード行を追加して実行できるようにする必要があります。これにより、システムが内容を認識できるようになります。種類 プログラムはスクリプトを実行しようとしています。 Unix システム用に追加されたコードの最初の行は、Windows でのスクリプトの実行には影響しないため、この方法を使用してクロスプラットフォーム スクリプトを作成することもできます。

1. PHP を使用して Crontab でスクリプトを実行する

Crontab で通常のシェル スクリプトを呼び出すのと同じように (Crontab の特定の使用法)、PHP プログラムを使用して PHP を呼び出しますこのスクリプトは、次のように myscript.php を 1 時間ごとに実行します。

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
ログイン後にコピー

/usr/local/bin/php は、PHP プログラムのパスです。

2. URL を使用して Crontab でスクリプトを実行する

PHP スクリプトを URL によってトリガーできる場合は、lynx、curl、または wget を使用して Crontab を設定できます。

次の例では、Lynx テキスト ブラウザを使用して URL にアクセスし、PHP スクリプトを 1 時間ごとに実行します。 Lynx テキスト ブラウザは、デフォルトで会話モードを使用して URL を開きます。ただし、以下に示すように、lynx コマンド ラインで -dump オプションを使用して、URL 出力を標準出力に変換します。

00 * * * * lynx -dump http://www.sf.net/myscript.php
ログイン後にコピー

次の例では、CURL を使用して URL にアクセスし、5 分ごとに PHP スクリプトを実行します。 Curl は、デフォルトで出力を標準出力に表示します。 「curl -o」オプションを使用すると、スクリプトの出力を一時ファイル temp.txt にダンプすることもできます。

*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php
ログイン後にコピー

次の例では、WGET を使用して URL にアクセスし、10 分ごとに PHP スクリプトを実行します。 -q オプションは、Quiet モードを示します。 「-O temp.txt」は、出力が一時ファイルに送信されることを意味します。

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php
ログイン後にコピー

5. ini_set 関数の使い方の詳しい説明

PHP ini_set は、関数の実行時に有効になる php.ini の値を設定するために使用されます。スクリプトが終了すると設定は無効になります。 php.ini ファイルを開かずに設定を変更できるため、仮想空間では非常に便利です。

関数形式:

string ini_set(string $varname, string $newvalue)
ログイン後にコピー

すべてのパラメータを設定できるわけではありません。マニュアルのリストを参照できます。

共通設定:

@ ini_set(&#39;memory_limit&#39;, &#39;64M&#39;);
ログイン後にコピー

menory_limit: スクリプトが適用できる最大メモリ バイト数を設定します。これにより、不適切に作成されたスクリプトがサーバー上の利用可能なメモリを消費するのに役立ちます。 @ 記号は、エラーが出力されないことを意味します。

@ini_set(&#39;display_errors&#39;, 1);
ログイン後にコピー

display_errors: エラー メッセージのカテゴリを設定します。

@ini_set(&#39;session.auto_start&#39;, 0);
ログイン後にコピー

session.auto_start: セッション処理を自動的に開くかどうか。1 に設定すると、プログラム内で session_start() を使用して手動でセッションを開く必要がなく、セッションを使用することもできます。

パラメータが 0 の場合、セッションはありません。セッションを手動で開くと、エラーが報告されます。

@ini_set(&#39;session.cache_expire&#39;, 180);
ログイン後にコピー

session.cache_expire: クライアント キャッシュ内のセッション ページの制限期間 (分) を指定します。デフォルトは 180 分です。 session.cache_limiter=nocache が設定されている場合、ここでの設定は無効になります。

@ini_set(&#39;session.use_cookies&#39;, 1);
ログイン後にコピー

session.use_cookies: Cookie を使用してクライアントにセッション ID を保存するかどうか;

@ini_set(&#39;session.use_trans_sid&#39;, 0);
ログイン後にコピー
session.use_trans_sid: クリア コー​​ドを使用して SID (セッション ID) をクライアントに表示するかどうかURL、

デフォルトは、ユーザーにセキュリティ リスクをもたらすため禁止されています:

ユーザーは、電子メール/irc/QQ/MSN などを通じて、有効な SID を含む URL を他の人に伝える可能性があります。

有効な SID を含む URL は公共のコンピューターに保存される場合があります。

ユーザーは、固定 SID を持つ URL をお気に入りまたは閲覧履歴に保存できます。 URL ベースのセッション管理には、Cookie ベースのセッション管理よりも常に大きなリスクが伴うため、無効にする必要があります。

PHP のスケジュールされたタスクは非常に興味深いものです。上記は、この記事で提供されるソリューションの一部です。この記事のアイデアを通じて独自のソリューションを開発することもできます。困っているすべての人に役立つことを願っています。

以上がPHP でスケジュールされたタスクを実装する 5 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート