PHPの実行時間を取得する。プログラムがあまりにも多い場合や、なんか遅いかも?という場合にPHPの実行時間を計測していきたいと思います。7月22日記事
目次
サーバも内部的に時間で動いています。そんな中で、サーバの時間をマイクロタイム単位で取得できれば、あとは引き算で計測するだけでできます。
microtime();
そして、()の中、いわゆる引数にtrueを使うと小数点の数字float型で返します。
<?php $start_time = microtime(true); /*プログラム開始*/ /*プログラム終了*/ $end_time = microtime(true); $result = $end_time - $start_time; print "<br>".$result."秒かかりました。"; ?>
<?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."秒かかりました。"; ?>
<?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."秒かかりました。"; ?>
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ケタの数字パスワードを探すプログラム。主にブルーとフォースアタックと言われています。適当に作ってみます。
※入力データのチェックなどは省きます。 自分専用コードです(笑)
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を入力してみる。
11.53734588623秒かかりました。 パスワードは99999999です。
スクリプト言語(php言語など)だとコンパイラ言語(C言語など)に比べ、遅いです。C言語で書けばもっと早い結果が出ると思います。
また、高性能なマシンならすぐ解析ができます。
パスワードは数字にしないようにしましょう。
以上