スケジュールされた実行タスクは、ドキュメントの定期的な公開、ジャンク情報の定期的なクリーンアップなど、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('memory_limit','512M'); // 设置内存限制 $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 'config.php'; if(!$run) die('process abort'); //ToDo sleep($interval);// 等待5分钟 } while(true);config の return 0 を変更してプログラムを停止します。 php. 実行可能な方法は、config.php ファイルと特別なフォームを操作し、設定用の HTML ページを通じていくつかの変数を設定することです。欠点: システム リソースを消費し、長時間実行すると、時には、予期せぬ危険が隠れていることもあります。たとえば、メモリ管理の問題など。
3. シンプルに改良された
<?php $time=15; $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; /* 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('memory_limit', '64M');menory_limit: スクリプトが適用できる最大メモリ バイト数を設定します。これにより、不適切に作成されたスクリプトがサーバー上の利用可能なメモリを消費するのに役立ちます。 @ 記号は、エラーが出力されないことを意味します。
@ini_set('display_errors', 1);display_errors: エラー メッセージのカテゴリを設定します。
@ini_set('session.auto_start', 0);session.auto_start: セッション処理を自動的に開くかどうか。1 に設定すると、プログラム内で session_start() を使用して手動でセッションを開く必要がなく、セッションを使用することもできます。 パラメータが 0 の場合、セッションはありません。セッションを手動で開くと、エラーが報告されます。
@ini_set('session.cache_expire', 180);session.cache_expire: クライアント キャッシュ内のセッション ページの制限期間 (分) を指定します。デフォルトは 180 分です。 session.cache_limiter=nocache が設定されている場合、ここでの設定は無効になります。
@ini_set('session.use_cookies', 1);session.use_cookies: Cookie を使用してクライアントにセッション ID を保存するかどうか;
@ini_set('session.use_trans_sid', 0);session.use_trans_sid: クリア コードを使用して SID (セッション ID) をクライアントに表示するかどうかURL、デフォルトは、ユーザーにセキュリティ リスクをもたらすため禁止されています: ユーザーは、電子メール/irc/QQ/MSN などを通じて、有効な SID を含む URL を他の人に伝える可能性があります。 有効な SID を含む URL は公共のコンピューターに保存される場合があります。 ユーザーは、固定 SID を持つ URL をお気に入りまたは閲覧履歴に保存できます。 URL ベースのセッション管理には、Cookie ベースのセッション管理よりも常に大きなリスクが伴うため、無効にする必要があります。
PHP のスケジュールされたタスクは非常に興味深いものです。上記は、この記事で提供されるソリューションの一部です。この記事のアイデアを通じて独自のソリューションを開発することもできます。困っているすべての人に役立つことを願っています。
以上がPHP でスケジュールされたタスクを実装する 5 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。