【PHP8.x】microtime関数の使い方

microtime関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

microtime関数は、現在のUnixタイムスタンプをマイクロ秒単位まで高精度に取得する関数です。この関数は、特にプログラムやスクリプトの実行時間を非常に詳細に計測したい場合に利用されます。

引数を指定しないか、またはfalseを渡した場合、microtime関数は"マイクロ秒 秒"という形式の文字列を返します。例えば、"0.123456 1678886400"のような文字列が得られます。この形式では、最初の数値が秒の小数点以下のマイクロ秒を表し、次の数値が現在のUnixタイムスタンプ(1970年1月1日00:00:00 UTCからの経過秒数)を表しています。

一方、引数にtrueを渡した場合、microtime関数は浮動小数点数(フロート)として、秒とマイクロ秒を組み合わせた単一の数値を返します。例えば、1678886400.123456のような数値が得られ、これによってより数値として扱いやすい形で高精度な時刻情報を取得できます。

主に、Webアプリケーションやスクリプトが特定の処理にかかる時間を厳密に測定し、パフォーマンスのボトルネックを特定したり、コードの最適化を行う際に非常に役立ちます。time()関数よりもさらに細かい時間(1秒の100万分の1単位)で計測したい場合に活用できるため、パフォーマンス分析の基本となる関数の一つです。

構文(syntax)

1<?php
2// 引数なしの場合、"マイクロ秒 秒" の形式で文字列を返します。
3$string_time = microtime();
4
5// trueを引数に渡すと、Unixエポックからの秒数を浮動小数点数で返します。
6$float_time = microtime(true);
7?>

引数(parameters)

?bool $as_float = null

  • bool $as_float = null: trueを指定すると浮動小数点数で、falseまたはnullを指定すると文字列でマイクロ秒単位のマイクロタイムを返します。

戻り値(return)

string|float

microtime() 関数は、現在のマイクロ秒単位までの時刻を文字列または浮動小数点数で返します。

サンプルコード

PHP microtime(true) で処理時間を計測する

1<?php
2
3/**
4 * microtime(true) を使用して、簡単な処理の実行時間を測定するサンプルコードです。
5 * microtime(true) は、現在のUnixタイムスタンプをマイクロ秒単位まで含んだ浮動小数点数として返します。
6 */
7
8// 処理開始時のタイムスタンプをマイクロ秒単位で取得
9$startTime = microtime(true);
10
11// ここに測定したい処理を記述します。
12// 例として、簡単なループ処理を実行します。
13for ($i = 0; $i < 1000000; $i++) {
14    // ダミーの計算
15    $dummyResult = sqrt($i) * log($i + 1);
16}
17
18// 処理終了時のタイムスタンプをマイクロ秒単位で取得
19$endTime = microtime(true);
20
21// 実行時間の計算(終了時間 - 開始時間)
22$executionTime = $endTime - $startTime;
23
24// 結果を小数点以下4桁まで表示
25echo "処理にかかった時間: " . sprintf('%.4f', $executionTime) . " 秒\n";
26
27?>

PHPのmicrotime関数は、現在のUnixタイムスタンプをマイクロ秒単位まで含めて取得する機能を提供します。この関数は、引数$as_floattrueを指定することで、戻り値を浮動小数点数(float)として返します。このfloat形式は、秒とマイクロ秒が小数点で連結された形になるため、時間の計算が非常に容易になります。

サンプルコードでは、このmicrotime(true)を活用して、特定の処理にかかる実行時間を正確に測定しています。まず、処理が始まる直前にmicrotime(true)を呼び出し、その時点のタイムスタンプを$startTimeに格納します。次に、実行時間を測定したい実際の処理、ここではダミーの計算を含むループ処理を実行します。処理が完了した後、再びmicrotime(true)を呼び出して$endTimeに終了時のタイムスタンプを記録します。

最後に、$endTimeから$startTimeを差し引くことで、目的の処理が実行された正確な時間を算出しています。この結果は小数点以下の桁数まで表示されるため、非常に短い処理の性能評価にも利用できます。このようにmicrotime(true)は、プログラムのパフォーマンス分析や最適化を行う上で、非常に強力なツールとなります。

microtime(true)は、現在のUnixタイムスタンプをマイクロ秒単位まで含んだ浮動小数点数(float)として返します。引数にtrueを指定しない場合、文字列(string)で返されるため、時間計算を行う際は必ずtrueを指定してください。非常に短い処理の実行時間を簡易的に測定するのに適していますが、PHPの実行環境やOSのスケジューリングにより、厳密な精度が常に保証されるわけではありません。計測には若干の誤差が生じる可能性があることを理解して利用しましょう。長時間の処理や本番環境での詳細なパフォーマンス分析には、Xdebugなどの専用のプロファイリングツールがより適しています。

PHP microtimeで処理時間を秒に変換する

1<?php
2
3/**
4 * microtime関数を使用して、処理の実行時間を秒単位で計測するサンプルコードです。
5 * $as_float引数をtrueに設定することで、浮動小数点数としてマイクロ秒を含むタイムスタンプを取得し、
6 * 時間計算を容易にしています。
7 */
8
9// 処理開始時刻をマイクロ秒単位まで取得 (浮動小数点数形式)
10$startTime = microtime(true);
11
12// ここに計測したい処理を記述します。
13// 例として、2秒間待機する処理を入れます。
14echo "処理を開始します。\n";
15sleep(2); // 2秒間処理を停止
16echo "処理が完了しました。\n";
17
18// 処理終了時刻をマイクロ秒単位まで取得 (浮動小数点数形式)
19$endTime = microtime(true);
20
21// 処理にかかった時間を計算 (秒単位)
22$executionTime = $endTime - $startTime;
23
24// 実行時間を表示
25// number_format関数で小数点の桁数を調整し、見やすくしています。
26echo "この処理にかかった時間: " . number_format($executionTime, 4) . " 秒\n";
27
28?>

PHPのmicrotime関数は、UNIXエポックからの現在の時刻をマイクロ秒単位(100万分の1秒)まで取得するための関数です。プログラムの実行時間を非常に精度高く計測したい場合に利用されます。

引数$as_floattrueを指定すると、マイクロ秒を含む現在のタイムスタンプが浮動小数点数(float型)として返されます。これにより、時間計算を行う際に文字列の変換が不要となり、直接引き算などで時間を求められるため非常に便利です。nullまたはfalseを指定した場合や引数を省略した場合は、"秒 マイクロ秒"という形式の文字列として返されます。戻り値は、引数の指定によってstring型またはfloat型となります。

このサンプルコードでは、microtime(true)を使用して処理の実行時間を秒単位で計測する方法を示しています。まず、計測したい処理が開始される直前にmicrotime(true)を呼び出して開始時刻を取得し、次に計測対象の処理を実行します。そして、処理が完了した直後に再度microtime(true)を呼び出して終了時刻を取得します。

取得した終了時刻から開始時刻を差し引くことで、処理にかかった正確な時間を浮動小数点数として得ることができます。最後に、number_format関数を使って、計算された実行時間を小数点以下4桁に整形し、見やすい形で表示しています。このようにmicrotime関数を用いることで、プログラムのパフォーマンス測定に役立てることが可能です。

microtime関数で処理時間を計測する際は、引数にtrueを指定し、浮動小数点数として時刻を取得することが重要です。これにより、戻り値が数値型となり、開始時刻と終了時刻の引き算で簡単に実行時間を計算できます。引数を指定しない、またはfalseを指定した場合、戻り値は「秒 マイクロ秒」のような文字列形式になるため、そのままでは数値計算ができませんので注意が必要です。計測結果は小数点以下の桁数が多くなることがありますので、number_format関数などを使って適切な桁数に整形すると、より見やすく表示できます。処理の正確な計測のためには、必ずmicrotime(true)を使用してください。

関連コンテンツ

【PHP8.x】microtime関数の使い方 | いっしー@Webエンジニア