※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

PHPの実行時間を取得する。プログラムがあまりにも多い場合や、なんか遅いかも?という場合にPHPの実行時間を計測していきたいと思います。7月22日記事

目次



サーバの時間をマイクロタイムで計測しているmicrotime関数を使う

サーバも内部的に時間で動いています。そんな中で、サーバの時間をマイクロタイム単位で取得できれば、あとは引き算で計測するだけでできます。

microtime();

そして、()の中、いわゆる引数にtrueを使うと小数点の数字float型で返します。

プログラム

<?php
$start_time = microtime(true);

/*プログラム開始*/

/*プログラム終了*/
$end_time = microtime(true);
$result = $end_time - $start_time;

print "<br>".$result."秒かかりました。";
?>

計測(比較)

1から10000までを羅列表示させるプログラム

<?php

$start_time = microtime(true);

/*プログラム開始*/
for($i = 1; $i <= 10000 ; $i++){
	print $i;
}

/*プログラム終了*/
$end_time = microtime(true);
$result = $end_time - $start_time;

print "<br>".$result."秒かかりました。";
?>



計測(実行)

1から10000までを改行表示させるプログラム

<?php
$start_time = microtime(true);

/*プログラム開始*/
for($i = 1; $i <= 10000 ; $i++){
	print $i."<br>";
}

/*プログラム終了*/
$end_time = microtime(true);
$result = $end_time - $start_time;

print "<br>".$result."秒かかりました。";
?>



それぞれ10回測定結果

100回ぐらいやらないと正確なデータがとれないかもしれませんが、とりあえず結果です。

回数 BRなし BRあり
1 0.008934021 0.017646074
2 0.011970043 0.016313076
3 0.009063959 0.017118931
4 0.005344868 0.015038967
5 0.007961035 0.004641056
6 0.010595083 0.005411863
7 0.00889492 0.013128996
8 0.008177042 0.014132977
9 0.010121107 0.012089968
10 0.007774115 0.013499022
平均 0.008883619 0.012902093



このように平均がでたらt検定の流れ・・・が普通ですが、割愛します

計測(実行)

8ケタの数字パスワードを探すプログラム。主にブルーとフォースアタックと言われています。適当に作ってみます。 ※入力データのチェックなどは省きます。 自分専用コードです(笑)

1から99999999の8桁の数字の中から数字をループで回していき、入力されたものと一致したらプログラムを終了させます。

index.phpでもindex.htmlでも・・・

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
</head>

<body>
<form action="check.php" method="post">
<p>8桁の数字のパスワードを入力してください。<input type="text" name="number"></p>
<input type="submit" name="submit" value="送信">
</form>

</body>
</html>

check.php

<?php
$start_time = microtime(true);
$number = $_POST["number"];

for($i = 1; $i <100000000;$i++){
	if($i == $number){
		break;		
	}
}
$end_time = microtime(true);
$result = $end_time - $start_time;
 
print "<br>".$result."秒かかりました。";
echo "<br>パスワードは".sprintf("%08d", $i)."です。";
?>

数字がでかいほど当然計測時間が長くなります。むう。超簡単に書いたから7桁の数字いれられても8桁で返します・・・orz

結果(99999999の場合)

99999999を入力してみる。

11.53734588623秒かかりました。
パスワードは99999999です。 

スクリプト言語(php言語など)だとコンパイラ言語(C言語など)に比べ、遅いです。C言語で書けばもっと早い結果が出ると思います。 また、高性能なマシンならすぐ解析ができます。

パスワードは数字にしないようにしましょう。

以上