PHPでスクリプトの実行時間を調べる方法 PHPスクリプト実行時間

どのサーバーサーバーであなたのスクリプトは動作しますが、そのスピードの問題は全員に関係します。 サーバーへの負荷はこれに左右されます(無料ホスティングでは月に特定のプロセッサ時間が与えられます)そしてその後ユーザーがサイトを表示し始めるまでの時間(そして最近のユーザーはサイトロード時間に関して非常に重要です)。


  この非常に速い速度は、microtime()関数を使って非常に簡単に決定できます。
  デフォルトでは、この関数は "msec sec"の形式で文字列を返します。secは、UNIXエポックの開始(1970年1月1日、00:00:00 GMT)から経過した秒数で、msecは小数部です。
  しかし、関数がオプションのmicrotimeパラメータ([bool $ get_as_float])を指定して呼び出された場合、引数が渡されたと仮定します。   get_as_float   は、TRUEまたは1で、実数を返します。

エコーmicrotime(); // 0.79687900 1234083984 echo microtime(0)を取得します。 // 0.79687900 1234083984 echo microtime(false)を返します。 // 0.79687900 1234083984 echo microtime(1)を取得します。 // 1234083984.79 echo microtime(true)が返されます。 // 1234083984.79を受け取ります
  このことから、phpスクリプトの最初に次の行を書いたことになります。
  $ time_start_script = microtime(1);
  そしてスクリプトの最後に:
  $ time_stop_script = microtime(1); $ time_script_work = $ time_stop_script - $ time_start_script; echo $ time_script_work;

スクリプトの実行時間を取得します。これは実行速度を適切に評価するのに十分です。

さて、あなたが "自転車"を思い出すならば、あなたは10-15桁までの精度で時間を得ることができます(少なくともスクリプト実行時間に応じて正確にそれをしました)、しかしこれはスクリプト実行時間により大きな影響を与えるでしょう 上記の例とは対照的に、あなたは他の便利な機能について学ぶでしょう。
  phpスクリプトの最初に行を書きましょう。
  $ time_start_script = microtime(); $ time_start_script = explode( ""、$ time_start_script); $ time_start_script = $ time_start_script ["0"] + $ time_start_script ["1"];
  そしてスクリプトの最後に:
  $ time_stop_script = microtime(); $ time_stop_script = explode( ""、$ time_stop_script); $ time_stop_script = $ time_stop_script ["0"] + $ time_stop_script ["1"]; $ time_script_work = $ time_stop_script - $ time_start_script; echo $ time_script_work。 "sec";
この例は私の場合0.000353097915649秒でした。
  それでは、この奇妙なexplode()関数が何であるかを見てみましょう。
  配列展開(文字列$セパレータ、文字列$文字列[、int $制限])
  この関数は、separatorを区切り文字として使用して文字列stringを分割した文字列の配列を返します。 limit引数が与えられた場合、配列は最大のlimit要素を含み、最後の要素は残りの文字列を含みます。
  separatorが空の文字列( "")の場合、explode()はFALSEを返します。 separatorが文字列に含まれていない場合、explode()は1つの文字列要素を含む配列を返します。
  使用例:$ pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $ pieces = explode( ""、$ pizza); $ pieceをエコーし​​ます。 // piece1 echo $ pieces; // piece2
  基本的にこれですべてです。 今、あなたはあなたが書いたスクリプトの速度を評価することができます。
  添付ファイルには、ここにリストされているスクリプトのソースコードが含まれていますが、スクリプトをより長く実行するために、何百万回も実行される空のループが含まれています。
  頑張ってください。

2012年2月10日13ルーブリック:、

時には、訓練された簡単な目だけではなく、スクリプト(またはスクリプトの一部)の実行速度に細心の注意を払う必要があります。 ダウンロード速度を測定するPHPの機能が助けになるときです。 あなたはおそらくそれらを使ったでしょう、そして一般にあなたはそれをする方法を知っています。 しかし念のために、それを行う方法がわからない人、および「重要な問題」セクションについては、この問題を解決する最も簡単なコードを投稿します。

$ start = microtime(true);
//スクリプト本体
echo "スクリプト実行時間:"(microtime(true) - $ start); "sec";

すべてがおかしいです。 1行目では、開始時刻を指定して変数を作成します。 それは機能を通して達成されます マイクロタイム   trueが送信された場合 - これにより、小数点以下の桁数が多い秒数を取得できます。 ちなみに時間は、Unix形式で。

次に、スクリプトコード全体が表示されます。その後、3行目で、現在の時刻からスクリプトの開始位置を差し引いて、小数点以下の精度でphpスクリプトを実行します。


ブラウザが閉じるのを待っていなければ、 "重い"スクリプトはいつまで動作しますか? そして彼らは仕事を続けますか? 観察が示したように、彼らは彼らに割り当てられた仕事をやろうとして生き続けている。 この種の時間を制御するための多くのもの、スクリプトの「暗い」生活はタイプ指示に頼る

ignore_user_abort(ブールモード)

この命令がで呼び出された場合   パラメータ、それはその不在と同等です。 通常はパラメータで指定されます 本当の - ignore_user_abort(true)。 ブラウザが接続を切断したとしても、スクリプトを続行する必要がある場合はこれが必要です。 一般に、phpは接続状態を追跡することができます。 ブラウザウィンドウを閉じた後でも、スクリプトが継続する状況に興味がありました。 確認は非常に簡単です。しばらく実行するスクリプトを作成し、それを開始してスクリプトが終了する前にブラウザウィンドウを閉じる。スクリプトにシャットダウンマーカーを追加することを忘れないでください。たとえば、ファイルを作成します。 スクリプトのパフォーマンスを追跡することができます。 一般に、エージェント(ブラウザ)のセッションを閉じた後、スクリプトは終了するはずですが、ご覧のとおり、これはそうではありません。 この場合、それをバックグラウンド実行(cron)に転送するのが合理的です。 しかし、この機能を分析することはまだ面白かったです。 命令は接続状態を追跡するために使用されます。 connection_status()。 さらなる操作のために、ラッパーが書かれました:

//接続ステータスのリターンコード
関数getConnectStatus()(
  connection_status()を返します。
}

//接続ステータスの種類をコードで返す
関数getConnectStatusByCode($ connectionStatus)(
  switch($ connectionStatus)(
  ケースCONNECTION_NORMAL:
  $ status = "Normal";
  壊れる
  ケースCONNECTION_ABORTED:
  $ status = "User Abort";
  壊れる
  ケースCONNECTION_TIMEOUT:

  $ status = "最大実行時間を超えました";
  壊れる
  ケース(CONNECTION_ABORTED&CONNECTION_TIMEOUT):
  $ status = "中止およびタイムアウト";
  壊れる
  デフォルト:
  $ status = "Unknown";
  壊れる
}
  $ statusを返します。
}



}

今、あなたはどんな長い仕事でもシミュレートする機能を書くことができます

//模倣の長いスクリプト
function scriptImitation()(

  $ start = time();

  $ limitIteration = 1,000,000;
  ($ i = 0; checkConnectionStatus()&&($ iの場合< $limitIteration); $i++) {
  //いくつかの長い仕事...
}

  $ end = time();
  $ runTime = $ end - $ start;

If($ i === $ limitIteration ||!CheckConnectionStatus())(
  $ connectStatus = getConnectStatusByCode(getConnectStatus());
  $ scriptImitationLog = "接続状態:$ connectStatus";
  $ scriptImitationLog。= ";";
  $ scriptImitationLog。= "イテレーション:$ i";
  $ scriptImitationLog。= ";";
  $ scriptImitationLog。= "実行時間:$ runTime second";

File_put_contents( "scriptImitationLog.txt"、$ scriptImitationLog);
}

実際には、私たちは定期的に私たちの脚本の仕事を止めて始めます。 エージェントウィンドウをどれだけ早く閉じようとしても、スクリプトは正常に機能し、ログが出力に作成されました。 忘れないで max_execution_timeこの時間より長いと、スクリプトは実行されません。 私たちの場合、彼は増やされました。 ログを見てみましょう。

接続ステータス:正常。 繰り返し:100万 実行時間:5秒

ご覧のとおり、接続は正常で、サイクルは最後まで機能しています。 それで、契約は何ですか? この記事では stackoverflow   私はこの解決策を見つけました - http://stackoverflow.com/questions/2389035/php-connection-status。 そしてそれは出力バッファに接続されていました:定期的に少量のデータ(例えば、空の文字)がスクリプトの出力バッファに書き込まれてからリセットされます(通常phpは内容全体を強制的に送信しそれからクリアすることを意味します)。 この目的のために、機能の共有を使用することが提案されている。 ob_flush   そして 洗い流す。 そしてリセットのために接続が暗示されるので(バッファはブラウザ - イニシエータの方向に送られるように形成されます)、そして次のリセットで、通常の接続がなければ、その状態は別の状態に転送されます( ユーザーが打ち切られました) そして、スクリプトに指示がないか、またはフォームで与えられるならば

ignore_user_abort(false);

その後、通常の接続状態が変化すると、指示があるとスクリプトはただちに実行を停止します。

ignore_user_abort(true);

接続状態が変化しても、スクリプトは最後まで実行されますが、この場合は接続状態を監視できます。 これを念頭に置いて、ラッパーの1つをわずかに変更します。

//接続ステータスを確認します(true - 正常、false - 異常)
function checkConnectionStatus()(
  ""を印刷します。
  ob_flush();
  flush();
  connection_status()=== 0を返します。
}

これで、すべてが制御され、ブラウザを閉じると、スクリプトが中断されるか、他の動作が体系化される可能性があります。
  最後に、別の観察結果を示します。 変更を加える前と後でラッパーでスクリプトの実行時間をログで比較すると - checkConnectionStatus,
  出力バッファのリセットには長い時間がかかると結論付けることができます。 そのため、バッファをリセットせずにテストスクリプトを1回繰り返す時間は、平均で - 0.005ミリ秒、リセット付き - 0.028ミリ秒すなわち、平均バッファフラッシュにかかった 0.023ミリ秒あれで 4,6 複数回の繰り返し これは、 "重い"スクリプトの作業の寿命を追跡する上記の方法が、メインタイムを長くする可能性があることを示しています。 このテストはFirefoxバージョン29.0.1で行われました。 すべての成功

スクリプトをデバッグするとき、最初に考慮しなければならない必須の要素は スクリプト実行時間。 そしてこの短い記事では、私はあなたに非常に良くて簡単な方法を紹介します。 スクリプトの実行時間を知る方法.

日付と時刻を処理するための機能に基づいています。 それがどのように起こるかをあなたが理解するように、私は例を検討することを提案します。 スクリプト実行時間:

   $ start = microtime(true);
   $ sum = 0。
   ($ i = 0; $ iの場合< 100000; $i++) $sum += $i;
   echo "スクリプトの実行時間:"(microtime(true) - $ start);
?>

その結果、私達はそれを見るでしょう スクリプト実行時間   たとえば、次のようになります。 " 0.014652967453 あなたがそれを切り上げるならば、これは 0.015   秒 これはスクリプトの実行時間です。

今それはどのように動作します。 機能 マイクロタイム()   送信値あり 本当の   午前0時からの秒数を返します 01.01.1970 そして、この値は100分の1秒まで計算されます。

次に私達がチェックする通常のスクリプトがあります。 代わりに、それは確かにあなたのスクリプトになります。 そして最後に、最後の行は現在の時刻(スクリプトが実行された後)とスクリプトの開始時に記録した時刻との差です。 スクリプトの実行後と開始前の時間の差は、 スクリプト実行時間.

私はすべてがここで簡単だと思います。 しかし、私はあなたが時間を計算するこの方法を使うことを強く勧めます。 例えば、私がこのサイトが立っている私のエンジンの仕事をデバッグしたとき、私は彼の仕事をほぼ 2   回

PHPをどれほど使用しても、まだ聞こえていない関数がいくつかポップアップします。 それらのいくつかは私たちにとって非常に役に立つでしょう。 私はすべてのPHPプログラマーの手に入るはずの便利な関数の小さなリストを作成しました。

1.可変数の引数を持つ関数を作成する

たぶん、あなたはすでにPHPが私達がオプションの引数で関数を作成することを可能にすることを知っています。 それでは、引数の数が場合によって異なる可能性がある関数を紹介します。

しかし、最初に、通常の方法で関数を作成する方法を覚えておきましょう。

  // 2つのオプションパラメータを持つ関数function foo($ arg1 = ""、$ arg2 = "")(echo "arg1:$ arg1 \\ n"; echo "arg2:$ arg2 \\ n";)foo( "hello"、 "世界"); / *は出力されます。arg1:hello arg2:world * / foo(); / *は出力されます:arg1:arg2:* /

それでは、引数を無制限に使って関数を書く方法を見てみましょう。 これを行うには、func_get_args()メソッドを使用します。

  //引数を指定しない関数foo()(//渡された引数の配列を返します$ args = func_get_args(); foreach($ args as $ k =\u003e $ v)(echo "arg"。($ k + 1)。) :$ v \\ n ";))foo(); / *は何も出力しません* / foo( "hello"); / * arg1を出力します。hello * / foo( "hello"、 "world"、 "again"); / * arg1:hello arg2:world arg3:を出力します* /

2. Glob()を使ってファイルを検索します。

多くの場合、関数名は自分自身のために話します。 glob()関数については言えません。

詳細に説明しない限り、その機能はscandir()メソッドに似ています。 それはあなたが見つけることができます 必要なファイル   パターンで:

  //すべてのphpファイルを検索$ files = glob( "*。php"); print_r($ files); / *出力します。Array(=\u003e phptest.php =\u003e pi.php =\u003e post_output.php =\u003e test.php)* /

いくつかの種類のファイルを見つけるために、これを書いてください:

  //すべてのphpファイルとtxtファイルを検索する$ files = glob( "*。(php、txt)"、GLOB_BRACE); print_r($ files); / * output:Array(=\u003e phptest.php =\u003e pi.php =\u003e post_output.php =\u003e test.php =\u003e log.txt =\u003e test.txt)* /

テンプレートでパスを指定することもできます。

  $ files = glob( "../ images / a * .jpg"); print_r($ files); / * output:Array(=\u003e ../images/apple.jpg =\u003e ../images/art.jpg)* /

ドキュメントへのフルパスを取得するには、realpath()メソッドを使用します。

  $ files = glob( "../ images / a * .jpg"); //配列の各要素に "realpath"関数を適用する$ files = array_map( "realpath"、$ files); print_r($ files); / *表示:配列(=\u003e C:\\ wamp \\ www \\ images \\ apple.jpg =\u003e C:\\ wamp \\ www \\ images \\ art.jpg)* /

3.使用メモリに関する情報

スクリプトの作業によって消費されるメモリ量を追跡している場合は、おそらくそれらを最適化することがより多いでしょう。

PHPには強力なメモリ追跡ツールがあります。 スクリプトの異なる部分では、負荷が異なる場合があります。 現時点で使用されているメモリの値を取得するために、memory_get_usage()メソッドを使用する必要があります。 最大使用メモリ量を固定する場合memory_get_peak_usage()

エコー「初期:」「.memory_get_usage()」「バイト数\\ n」; / *初期値:361400バイト* / //($ i = 0; $ iに対して小さな負荷をかける< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4.プロセッサ情報

これを行うには、getrusage()メソッドを使用してください。 ただし、この機能はWindowsでは機能しません。

Print_r(getrusage()); / * Print Array(=\u003e 0 =\u003e 0 =\u003e 2 =\u003e 3 =\u003e 12692 =\u003e 764 =\u003e 3864 =\u003e 94 =\u003e 0 =\u003e 1 =\u003e 67 =\u003e 4 =\u003e 0 =\u003e 0 =\u003e 0 =\u003e 6269 =\u003e 0)* /

上で概説した絵は、システム管理の経験がある人には明らかでしょう。 他のすべての人たちのために私たちはデコードを提供します:

  • ru_oublock:ブロック書き込み操作数
  • ru_inblock:ブロック読み込み操作数
  • ru_msgsnd:送信メッセージ数
  • ru_msgrcv:受信メッセージ数
  • ru_maxrss:非ページセットの最大サイズ
  • ru_ixrss:総共有メモリ
  • ru_idrss:非共有データの総量
  • ru_minflt:使用されているメモリページ数
  • ru_majflt:ページ欠落エラー数
  • ru_nsignals:受信信号数
  • ru_nvcsw:プロセスごとのコンテキスト切り替え数
  • ru_nivcsw:強制コンテキスト切り替え数
  • ru_nswap:ページング時のディスクアクセス数
  • ru_utime.tv_usec:ユーザモード時間(マイクロ秒)
  • ru_utime.tv_sec:ユーザーモード(秒)
  • ru_stime.tv_usec:特権モードの時間(マイクロ秒)
  • ru_stime.tv_sec:特権モードの時間(秒)

プロセッサがスクリプトを使用しているリソースを調べるには、 'user time'(ユーザーモードの時間)と 'system time'(特権モードの時間)の値が必要です。 あなたは秒とマイクロ秒の両方で結果を得ることができます。 合計秒数を10進数に変換するには、マイクロ秒の値を100万で割って2番目の値に加算する必要があります。

どういうわけか混乱した。 これが一例です。

  // 3秒間休む(3) $ data = getrusage(); エコー "User time:"。 ($ data ["en_utime.tv_sec"] + $ data ["en_utime.tv_usec"] / 1,000,000); エコー "システム時間:"。 ($ data ["ru_stime.tv_sec"] + $ data ["ru_stime.tv_usec"] / 1,000,000); / *を表示しますユーザー時間:0.011552システム時間:0 * /

スクリプトが完了するのに約3秒かかりましたが、プロセッサはあまり負荷がかかりませんでした。 実際、(sleep)を呼び出すと、スクリプトはほとんどCPUリソースを消費しません。 一般に、かなりの時間がかかりますが、プロセッサを使用しないタスクはたくさんあります。 たとえば、ディスクに関連付けられている操作を待っています。 そのため、スクリプトでCPU時間を常に使用するわけではありません。

これは別の例です。

  //($ i = 0; $ iに対して1000万回歩く<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

スクリプトのCPU時間は1.4秒でした。 この場合、システムコール時間は一般に短いです。

特権モードでの動作時間(System Time)は、プログラムに代わってプロセッサがカーネルへのシステム要求の実行に費やす時間です。 例:

  $ start = microtime(true); //(microtime(true) - $ startの間)3秒ごとにmicrotimeを呼び出す< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

これで、システム時間は前の例よりもはるかに多く費やされました。 システムリソースを使用するmicrotime()メソッドに感謝します。

ただし、表示される時間は正確ではない可能性があることに注意してください。 この時点で、CPUリソースは他のプログラムによって使用されているため、小さなエラーが発生する可能性があります。

5.魔法の定数

PHPには、現在の行番号(__LINE__)、ファイルパス(__FILE__)、ディレクトリパス(__DIR__)、関数名(__FUNCTION__)、クラス名(__CLASS__)、メソッド名(__METHOD__)、名前空間など、多くのマジック定数があります。 (__NAMESPACE__)

私達全員はそれらを考慮しません。 ほんの少しだけ見てみましょう。

  //このスクリプトはファイルの現在の場所に依存しており、//異なるディレクトリから使用されている場合は//問題が発生する可能性があります; require_once( "config / database.php"); //このスクリプトは問題を起こさないでしょうrequire_once(dirname(__ FILE__)。 "/config/database.php");

スクリプトをデバッグするときは__LINE__を使います。

  // code // ... my_debug( "デバッグメッセージ"、__LINE__); / *は4行目を出力します。デバッグメッセージ* / // another code // ... my_debug( "another debug message"、__LINE__); / *は11行目を出力します。* / function my_debug($ msg、$ line)(echo "Line $ line:$ msg \\ n";)

6.固有のIDを生成する

一意の文字列を生成する必要がある場合があります。 私はこの問題を解決するためにmd5()関数が使用されていることを何度も見てきました。

  //ランダムな文字列echo md5(time()。mt_rand(1.1000000))を生成します。

しかし実際には、この目的のためにPHPには特別な関数uniqid()があります。

  //ランダムな文字列を生成します。echo uniqid(); / *もう一度印刷する4bd67c947233e * / //もう一度echo uniqid(); / * 4bd67c9472340を出力します* /

肉眼で見ると、最初の文字はそれを穏やかに似たものにすることです。これは、この方法では文字の生成にサーバー時間が使用されるためです。 なぜならそれはさらに便利です。 生成された値はすべてアルファベット順に取得されるため、すばやく並べ替えることができます。

重複する可能性を減らすために、プレフィックスを追加するか、2番目のパラメータを使用します(文字数を増やす)。

  //プレフィックスecho uniqid( "foo_"); / *は、2番目のパラメータecho uniqid( ""、true)を指定してfoo_4bd67d6cd8b8f * / //を出力します。 / *は4bd67d6cd8b926.12135106を出力します* / //両方echo uniqid( "bar _"、true); / * bar_4bd67da367b650.43684647 * /を印刷します

この方法では、md5より小さい行が生成されるため、スペースを節約できます。

7.シリアライゼーション

複雑なデータをデータベースまたはファイルに保存する必要がありましたか? PHPでオブジェクトを文字列に変換するために、特別な関数が提供されています。

一般的に言って、これらのメソッドは2:serialize()とunserialize()です。

  //複素数配列$ myvar = array( "hello"、42、array(1、 "two")、 "apple"); //文字列に変換する$ string = serialize($ myvar); echo $ string; / * a:4:(i:0; s:5: "こんにちは"; i:1; i:42; i:2; a:2:(i:0; i:1; i:1; s) :3: "two";)i:3; s:5: "apple";)* / //初期値を取得します$ newvar = unserialize($ string); print_r($ newvar); / *配列を表示する(=\u003e hello =\u003e 42 =\u003e Array(=\u003e 1 =\u003e two)=\u003e apple)* /

これがこれらの機能のしくみです。 しかし、JSONの人気が急上昇したため、2つのPHPメソッドjson_encode()とjson_decode()がPHP 5.2に追加されました。 彼らの仕事はserialize()に似ています:

  //複素数配列$ myvar = array( "hello"、42、array(1、 "two")、 "apple"); //文字列に変換する$ string = json_encode($ myvar); echo $ string; / *は["hello"、42 ,, "apple"]を出力します* / //元の値を復元します print_r($ newvar); / *配列を印刷する(=\u003e hello =\u003e 42 =\u003e Array(=\u003e 1 =\u003e two)=\u003e apple)* /

このオプションはよりコンパクトで、JavaScriptなどの他の言語との互換性があります。 ただし、非常に大きなサイズのオブジェクトを扱うときは、データが失われる可能性があります。

8.行を圧縮する

圧縮について説明すると、ZIPアーカイブファイルがすぐに頭に浮かびます。 PHPはファイルなしで長い行を圧縮する機能を提供します。

次の例では、関数gzcompress()とgzuncompress()の動作を説明します。

$ string = "Loremイプサムドロル座ってamet、conittetur adipiscing elit。Nunc ut elit id mi ultricies adipiscing。Nulla facilisi。 Aliquam pretium ullamcorper urna quis iaculis、etiam ac massa sed、turpis tempor luctus、curabitur sed nibh eu elit mollis congue。 モリスのオナレ、モリスのオナレ、モリスのオナレ、ミエニスの旅館、モスの旅館、ミエリスの旅館、ユートミ、ユダヤ人のマレシュアダの湖アヌンヌラヌートのエットメトスhendreritescelerisque eu non enim。 ";" $ compressed = gzcompress($ string); echo "Original size:" strlen($ string)。 "\\ n"; / *は元のサイズ:800 * / echo "Compressed size:"を表示します。 strlen($ compressed)。 "\\ n"; / * print圧縮サイズ:418 * / // return $ original = gzuncompress($ compressed);

テキストの量を50%減らすことができます。 同じ目的で、gzencode()メソッドとgzdecode()メソッドを使用できます。これらのメソッドは、異なる圧縮アルゴリズムを使用します。

9.完了前に実行する

PHPには、スクリプトを終了する前にコードを実行できるregister_shutdown_function()関数があります。

いくつかの情報を見つけたいとします...スクリプトランタイム:

  //開始時間を取得します$ start_time = microtime(true); //いくつかの操作// ... //実行時間を表示して、「実行が完了しました」と表示します。 (microtime(true) - $ start_time)。 「秒」

一見すると、これは簡単な作業のように思えるかもしれません。 これらの目的のために、ファイルの末尾にコードを置くことができます。 ただし、これより前にexit()関数がどこかで機能していると、このコードは機能しません。 また、ページにエラーがある場合や、ユーザーがページの読み込みを中断した場合(ブラウザの対応するボタンをクリックして)、機能しません。

register_shutdown_function()メソッドを使用するとき、コードはとにかく実行されます:

  $ start_time = microtime(true); register_shutdown_function( "my_shutdown"); 関数my_shutdown()(グローバル$ start_time;エコー「実行に要した:」(microtime(true) - $ start_time)。「秒」)

結論

PHPは、その内容に驚かせることを決してやめない全世界です。 これらの機能についてどう思いますか?

テーマを続ける:
デバイス

おそらくそれを買うとき将来のタブレットユーザーが対応できる最も厄介な罠は偽物です。 コピーのための最も人気のあるモデルの一つ...