テンプレート公開
このエントリで書かれている内容は、今となっては時代遅れで陳腐な廃れた内容です。真に受けず、十分にご注意ください。
当サイトで使われている現時点のテンプレートのヘッダ部を公開してみる。参考になる部分があればこれをヒントに取り入れてください。誤りや改善案などありましたらコメント頂けると嬉しいです。ソースの通り、PHP を前提にしています。解説のために細々とコメントを入れています。
<?php
/* MT4i 対応 UA を MT4i に向ける */
$ua = explode( '/', $_SERVER['HTTP_USER_AGENT'] );
if ( $ua[0] == 'ASTEL' || $ua[0] == 'UP.Browser' || $ua[0] == 'PDXGW' ||
$ua[0] == 'DoCoMo' || $ua[0] == 'J-PHONE' || $ua[0] == 'L-mode' ||
preg_match( '/^KDDI/', $ua[0] ) ) {
header( 'HTTP/1.1 303 See Other' );
header( 'Location: <$MTBlogURL$>(MT4i への path)' );
exit();
}
/* 最終更新時刻の取得 */
/* 複数のソースから成り立つシステムではこの部分をもう少し工夫する */
$lm_time = getlastmod();
/* ETag 生成 */
$stats = stat( $_SERVER['SCRIPT_FILENAME'] );
$etag = sprintf( '"%x-%x-%x"',
$stats['ino'], $stats['size'], $stats['mtime'] );
/* 更新が無ければ無駄な送信トラフィックを減らす */
if ( ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) &&
strtotime( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) >= $lm_time ) ||
( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) &&
stripcslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) == $etag ) ) {
header( 'HTTP/1.1 304 Not Modified' );
exit();
}
/* XHTML の MIME 型を設定 */
if ( ( isset( $_SERVER['HTTP_ACCEPT'] ) &&
preg_match( '/application\/xhtml\+xml/', $_SERVER['HTTP_ACCEPT'] ) ) ||
preg_match( '/Opera[\/ ][67]\./', $_SERVER['HTTP_USER_AGENT'] ) ||
$ua[0] == 'W3C_Validator' || $ua[0] == 'Another_HTML-lint' ) {
define( 'MEDIATYPE_XHT', 'application/xhtml+xml' );
define( 'MEDIATYPE_JS', 'application/x-javascript' );
} else {
/* application/xhtml+xml 未対応 UA に対する後方互換処置 */
define( 'MEDIATYPE_XHT', 'text/html' );
define( 'MEDIATYPE_JS', 'text/javascript' );
$http_equiv_tags = <<<END
<meta http-equiv="Content-Type"
content="text/html; charset=<$MTPublishCharset$>" />
END;
}
/* HTTP Header 送信 */
header( 'Last-Modified: ' . gmdate( "D, d M Y H:i:s T", $lm_time ) );
/* キャッシュ期限を 30 分(1800 秒)後に設定(適当) */
header( 'Expires: ' . gmdate( "D, d M Y H:i:s T", $lm_time + 1800 ) );
header( 'ETag: ' . $etag );
header( 'Content-Type: ' . MEDIATYPE_XHT . '; charset=<$MTPublishCharset$>' );
/* MacIE 4.5 に対しては XML 宣言を送信しない */
if ( !preg_match( '/MSIE 4\.5; Mac/', $_SERVER['HTTP_USER_AGENT'] ) )
echo '<?xml version="1.0" encoding="<$MTPublishCharset$>" ?>', "\n";
echo <<<END
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="ja">
<head>
END;
/* application/xhtml+xml 未対応 UA に対する後方互換処置 */
if ( isset( $http_equiv_tags ) ) echo $http_equiv_tags;
?>
<title>...
vimcolor プラグインを通すと日本語で付けたコメント部分が文字化けしますね…… Perl 側の問題かな。
Text::VimColor.pm を書き換えて強引に解決。
その後幾つかの改善をしました。
このエントリで書かれている内容は、今となっては時代遅れで陳腐な廃れた内容です。真に受けず、十分にご注意ください。
- タグ
- Movable Type
- obsolete
- PHP
- templates
- 公開日時
- 2005-01-16T00:41:37+09:00 @695
- 更新日時
- 2005-02-09T01:58:38+09:00 @749
- Permalink URI & TrackBack URL
- http://blog.drry.jp/2005/01/16/0041
TrackBack ( 1 )
- 304 Not Modified の罠 from drry+@->
- 2005-01-27T00:08:58+09:00 @695
- 304 Not Modified を返信することによる、UA のキャッシュ利用の罠とその対策。Movable Type テンプレート用のヘッダ部分公開。
コメント