PHPでページの実行時間を取得

PHPなページの実行時間を計測するために下記のようなコードを使っているのだが、

<?php
$time_start = microtime(true);
?>

ページ表示部分

<?php
$time_end = microtime(true); 
echo "実行時間:" . number_format($time_end - $time_start , 5) . " sec";
?>

$time_start を毎回書くのが面倒。
request_once されるような config.php的なファイルに

define('START_TIME', microtime(true));

と定義しておくといいのかもしれないが、必要な時に関数一発で時間得られるようにしたかった。

で、こんな関数を作成。PHP5.4.0以降しか使えません

function getExectime()
{
    // 小数点以下5桁まで
    $t = number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'] , 5);
    return "実行時間" . $t . " sec";
}

PHP5.4.0から $_SERVER[‘REQUEST_TIME_FLOAT’]変数が追加された。
これはリクエスト開始時のタイムスタンプをマイクロ秒精度で得られる変数。

PHP5.1からは$_SERVER[‘REQUEST_TIME’]変数というのがあったのだが、こっちはマイクロ秒までは見てくれないので1秒以内の処理などは計測できなかった。
PHP: $_SERVER – Manual

これで実行時間が欲しい時に echo getExectime(); するだけでよくなった。
もうPHPファイルの最初に $time_start 書かなくてもいい。らくちん

もちろん PHPファイル内での特定の処理(ループの前後とか)の時間を計測する場合は $_SERVER[‘REQUEST_TIME_FLOAT’]使っても意味がないので、そういう用途には 従来の$time_startと$time_endの差分計測を使う。
今回はページ表示の実行時間計測なので、$_SERVER[‘REQUEST_TIME_FLOAT’]使う方がより正確な値が得られるんじゃないかな?っていうお話。

違いはどの程度になるかというと
従来方式
  実行時間:0.00410 sec
$_SERVER変数方式
  実行時間:0.01483 sec

リクエスト開始から処理開始までの0.01秒弱が加算された感じ

そもそも測定範囲が違うので、過去に計測した実行時間と比較したい場合は従来方式を使わないとダメ。

猫大けが

時は8月26日午前3時半

例年にない夏の暑さでエアコン入れてなかった自宅のサーバーが熱?で死亡
HDDを取り出したり電源を交換したり、結局マザーボードのSATAコントローラー関連の不調と判断して、ケース開けたまま部屋にデスクトップPCを放置していた。

その横でノラちゃん(♀5歳 名前はノラだが野良ではない完全室内猫)が毛づくろいをしていた。

するといきなりの叫び声

猫のケンカのコピペでいうと

A「マーーーーーーーーオ!!!!!!」
B「マーーーーーーーオ!!!!!」
A&B「ギャフベロハギャベバブジョハバ」

の最後の部分

驚いて近寄ると足がPCケースに引っかかってるように見えた。必死にもがいているが外れず叫び続けている。なんとかせねばと手を出すと、がっぷり手を噛みつかれた。なんとか振りほどいてPCケースを傾けると足が外れた。

左足のかかとの部分が出血しているように見えたので部屋を明るくして確認してみると、、、絶句。
ひと目でわかった。これは病院で手術コースだ。
続きを読む

ハトさまからおみやげいただいた

ハトさまが今年も台湾に旅行に行かれたようで、お土産をいただきました!台風接近してたけど天候大丈夫だったのだろうか…?

Taiwan Tea Spa (Rare Animals Pack)

台灣請泡茶 レア動物バージョン

凍頂烏龍茶は花粉症に有効らしい。マジかっ


ウーロン茶のティーパックなんだけど、動物が入浴してるように見える。かわいい
寒くなったら飲む

コーラ各種!!!

台湾のコカコーラ

例によって大きい台湾コカコーラペットボトル 600ml


前回もいただいた台湾コーラ 前回の→台湾の可口可樂(コカコーラ)

アルミボトルのコーラがかっこいい!!!!
と思ったらこれはアメリカ製らしい

一番左のは350ml缶に見えるけど330ml
最近は日本でも330ml缶がちらほら出てきてるけど、世界では(アメリカ除く)330mL缶が主流らしい
ググると1/3リットルだからっていう話が。日本の350mlはアメリカの355mL(12オンス)由来なんですかね。

真ん中のボトルタイプ缶は8.5オンス (251mL)
台湾への輸入物らしく、台湾語で書かれた品名や原材料シールが張られています。生産国は美國(アメリカ)


太陽餅

初めて知った。太陽餅 – Wikipedia

うまい!
外はパイ生地なのでwikipediaに書いてある通りポロポロこぼれるw
中の餡は麦芽餅らしく、想像よりは甘くなくやさしい甘さ。食感もっちり。

アジめ~る

アジめ~る

うちの猫は反応しませんでした


鯵そっくりなハガキ
テカリが本物すぎる。でも材質は塩ビ
送るには120円切手が必要 Made In Japan

いつもいただいてるので何か送らねばと思いつつ、どこにも出かけないのでタイミングがない。
あ、今回の宅配便の品名は普通でした。

Vagrantで構築したCentOS6.4の共有フォルダのパーミッション変更

さくっと開発環境構築できると話題のVagrant+VirtualBoxを試していたのだけど、chmodで共有フォルダ内のファイルのパーミッションを変更しようとしても反映されない。ホストがWindows7なのが悪いのかなんなのか

共有フォルダをApacheのドキュメントルートとしてシンボリックリンク貼ってるので、デフォルト?の0777だと動かないPHPスクリプトやCGIスクリプトが出てくる。

とりあえずVagrantfileを編集して応急処置

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"
    config.vm.synced_folder ".","/vagrant", :extra => "dmode=755,fmode=755"

とりあえずディレクトリ、ファイル両方755で
所有権も変更するなら :extra => “uid=1000,gid=1000,dmode=0755,fmode=0755” みたいに

これはvgrantというよりVirtualBox側の仕様なのかな。

1.3.0 (September 5, 2013) から :extraは使えなくなった
代わりに
config.vm.synced_folder “./”, “/vagrant”, owner: ‘root’, group: ‘root’, mount_options: [‘dmode=777’, ‘fmode=666’]
といった感じに mount_optionsを使用してArrayとして記入する

参考環境
ホストOS Windows7 64bit
ゲストOS CentOS6.4 (BOX http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box)
VirtualBox 4.2.12 r84980
Vagrant 1.2.7

CentOS6.4にMySQL5.6.12、PHP5.4.17を入れようとしてつまづく

ちょっと最近のバージョンで環境構築しようと
CentOS6.4にOracle版MySQL5.6.12を入れた後に、remiからPHP5.4.17を入れようした

[psychedelic@local ~]$ sudo yum install --enablerepo=remi php php-mbstring php-
mysql php-gd php-pear php-xml php-mcrypt pcre-devel php-devel

お約束的にいつも入れるパッケージ達をインストール。
と思ったら事前チェックでエラー ぐぬぬ

Transaction Check Error:
  file /usr/share/mysql/charsets/Index.xml from install of mysql-libs-5.5.32-1.el6.remi.x86_64 conflicts with file from package MySQL-server-5.6.12-1.el6.x86_64
  file /usr/share/mysql/charsets/armscii8.xml from install of mysql-libs-5.5.32-1.el6.remi.x86_64 conflicts with file from package MySQL-server-5.6.12-1.el6.x86_64
  file /usr/share/mysql/charsets/ascii.xml from install of mysql-libs-5.5.32-1.el6.remi.x86_64 conflicts with file from package MySQL-server-5.6.12-1.el6.x86_64
  file /usr/share/mysql/charsets/cp1250.xml from install of mysql-libs-5.5.32-1.el6.remi.x86_64 conflicts with file from package MySQL-server-5.6.12-1.el6.x86_64
(以下略)

MySQL-shared-compat-5.6.12-1.el6.x86_64.rpm を事前にインストールしてるはずなんで
mysql-libs関連も置き換わってるはずなんだけど、、、

結局php-mysql ではなく php-mysqlndにすることで解消
いまいち理解できてないのだが、もうMySQL5.6からはphp-mysqlnd使えよっていう話なのだろうか

スポンサーリンク
レクタングル大 広告