ホームページ >バックエンド開発 >PHPの問題 >PHPで時間制限を実装する方法

PHPで時間制限を実装する方法

藏色散人
藏色散人オリジナル
2021-10-29 09:44:322211ブラウズ

php で時間制限を実装する方法: 1. "set_time_limit(0)" を使用してプログラムを無制限に実行します; 2. ini_set を使用してメモリ制限を設定します; 3. 30 分ごとに実行するように設定します。

PHPで時間制限を実装する方法

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

制限時間の達成方法phpで?

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

ここ数日、PHP を使用して Web ページを定期的にクロールするサーバー アプリケーションを作成する必要がありました。 。インターネットで解決策を検索したところ、いくつかの解決策が見つかりました。要約すると次のようになります。

スケジュールされた実行タスクは、ドキュメントの定期的な公開、ジャンク情報の定期的なクリーンアップなど、Web サイトにとって比較的重要なタスクです。今日の Web サイトのほとんどは、開発された PHP 動的言語を使用しています。 PHP の実装では、Java や .Net などの AppServer の概念がないと判断され、http プロトコルはステートレス プロトコルです。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.php の return 0 を変更してプログラムを停止します。実行可能な方法は 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. サーバーのスケジュールされたタスク

Unix プラットフォーム

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

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

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

# 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 ビデオ チュートリアル

以上がPHPで時間制限を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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