• 締切済み

スクリプトの実行時間の測定について

スクリプトの実行時間を測定する為に、最初の行に $starttime = microtime(); を入れ、以後測定したい箇所に echo (microtime()-$starttime)."<br>"; を入れて時間を測定していたのですが、 何故か"mb_send_mail"を実行すると時間が戻ってしまいマイナスになってしまいます。 他のスクリプトでは発生しないのですが、ずれてしまう原因と対応方法を教えてください。 宜しくお願いします。

みんなの回答

  • ftdata
  • ベストアンサー率100% (1/1)
回答No.3

以前に私が作った実行時間測定クラスを紹介します <?php /** * <pre> * 処理の実行時間を測定するクラス * IDを利用して複数の処理時間を計測可能 * </pre> */ class Measure{ var $_lists; //測定する処理ごとのIDと開始時の時間 //IDを生成するためのタネ var $_idTane = array("scjklsfadlsdf","slsdvnfaoefa834ja","aasiasdioffaf54a6fkbns" ,"ajfkldjsalk","3456i7uiojvncfAIK","vnz,mjeopui"); /** * コンストラクタ<br /> * 乱数の初期化を行う * @param void * @return void */ function Measure(){ srand(microtime() * 5545); } /** * <pre> * カウントをスタート * </pre> * @param void * @return $id :カウントID */ function start(){ shuffle($this->_idTane); //ハッシュのタネ生成 $limit = rand(0,count($this->_idTane)); for($sa = 0;$sa <= $limit;$sa++){ $ID .= $this->_idTane[rand(0,count($this->_idTane))]; } $ID = md5($ID); //ハッシュ計算 $this->_lists[$ID]['starttime'] = $this->getmicrotime(); return $ID; } /** * <pre> * カウントをストップ * </pre> * @param $id :カウントID * @return $time :実行時間 */ function stop($ID){ if($this->_lists[$ID]){ $this->_lists[$ID]['endtime'] = $this->getmicrotime(); } else { return null; } $results = ($this->_lists[$ID]['endtime']) - ($this->_lists[$ID]['starttime']); return $results; } /** * <span style="color:red;">マイクロタイム</span>を取得 * @param void * @return $microtime :取得したマイクロタイム */ function getmicrotime(){ list($usec, $sec) = explode(" ",microtime()); return ((float)$sec + (float)$usec); } } ?> 使い方: <?php $measure = new Measure(); $id = $measure->start(); ←これで測定開始。複数使うとで複数の測定が可能!?(試してません) for($count = 0;$count < 1000;$count++) { //テストなので何もしない } echo $measure->stop($id); ←これで時間を取得する ?>

tetsu-jin
質問者

補足

ご回答、ありがとうございます。 及び、返答が大変遅くなってしまい申し訳ございません。 質問ですが、コレは何のスクリプトですか? 時間にハッシュで生成したIDを付けて配列にしたりしているようなのですが、実際の時間計測に関してはもう一人の方の参考URLにある例1の方法でやっているように見えますが?(違ったらゴメンナサイ)

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1です、失礼しました。 参考URLがローカルのドキュメントになってました。 訂正します

参考URL:
http://jp.php.net/manual/ja/function.microtime.php
tetsu-jin
質問者

お礼

返答が大変遅くなってしまい申し訳ございません。 参考URLの例2の方法です。 というか、質問の通りmb_send_mail以外のスクリプトでは問題なく動作しているので何故だろうと思い質問させていただきました。 ご回答、ありがとうございました。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

PHP5だったら microtime(true); としたらどうでしょうか 参考URLによると list($usec, $sec) = explode(" ", microtime()); の様に分解しないと、ちゃんと使えないようですが・・

参考URL:
D:\Book\PHP\html\function.microtime.html
すると、全ての回答が全文表示されます。

関連するQ&A