もしかして、このブログの過去記事に存在するかも…メンドイから探さないけどナー
さて、本題に入るとしよう。
ChromeのDevToolsなどで読み込みタイミングを見ることができる便利ヘッダー「Server-Timing」を使おうと思ったんですよ。
んで、PHPでこんな感じにしたわけですよ。
$start_at = microtime(true);
// 処理1
header('Server-Timing: timing1;dur=' . (microtime(true) - $start_at * 1000);
// 処理2
header('Server-Timing: timing2;dur=' . (microtime(true) - $start_at * 1000);
// 処理3
header('Server-Timing: timing3;dur=' . (microtime(true) - $start_at * 1000);
ところがどうしたことでしょう、DevToolsで見ると、最後のtiming3しか無いんです…orz
結論から言うと、こうです。
$start_at = microtime(true);
// 処理1
header('Server-Timing: timing1;dur=' . (microtime(true) - $start_at * 1000, false);
// 処理2
header('Server-Timing: timing2;dur=' . (microtime(true) - $start_at * 1000, false);
// 処理3
header('Server-Timing: timing3;dur=' . (microtime(true) - $start_at * 1000, false);
そう。header関数の第2引数にfalseを渡すだけ。
PHPマニュアルにこう書いてありました。
replace
オプションのパラメータ replace は、ヘッダが 前に送信された類似のヘッダを置換するか、または、同じ形式の二番目の ヘッダを追加するかどうかを指定します。デフォルトでは、この関数は 置換を行ないますが、二番目の引数に false を指定すると、同じ型の 複数のヘッダを強制的に生成します。例えば、
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?>
なんというわかりにくい表現かっ!
↓こんなんでいいんじゃね?
第2引数にtrue(デフォルト)を渡すと同名のヘッダーは上書きされ最後のもののみ送信されます。第2引数にfalseを渡すと複数送信されます。