ヘッダ部分のテンプレート(20050211 版)
このエントリで書かれている内容は、今となっては時代遅れで陳腐な廃れた内容です。真に受けず、十分にご注意ください。
当サイトでは全てのリソースにおいて、携帯端末からのアクセスに対しては HTTP/1.1 303 See Other を返し、MT4i へ渡していた。この場合、何か情報を求めて携帯端末で個別エントリアーカイヴを要求してきた訪問者は、どのリソースを要求しようと MT4i の Index を与えられる。これでは優しくないし、簡単に改善できそうなのでテンプレートに修正を施した。
この他に、スタイルシートの XML PI による指定と環境変数のチェックを厳密にするようにした。(HTTP_USER_AGENT を持たない UA なんてあったんだなぁ。)
<?php
/* MT4i 対応 UA を MT4i に向ける */
if ( isset( $_SERVER['HTTP_USER_AGENT'] ) )
$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' );
/* 個別エントリアーカイヴであれば該当エントリの ID を付けて渡す */
header( 'Location: <$MTBlogURL$>(Path to MT4i)<MTIfNonEmpty tag="MTEntryID">?id=<$MTBlogID$>&mode=individual&eid=<$MTEntryID$></MTIfNonEmpty>' );
exit();
}
/* 最終更新時刻の取得 */
/* 複数のソースから成り立つシステムではこの部分をもう少し工夫する */
$lm_time = getlastmod();
/* ETag 生成 */
$stats = stat( $_SERVER['SCRIPT_FILENAME'] );
$etag = sprintf( '"%x-%x-%x"',
$stats['ino'], $stats['size'], $stats['mtime'] );
/* 更新が無ければ 304 Not Modified を返し無駄な送信トラフィックを減らす */
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 ) ) &&
/* ただし、TypeKey にサインイン済みでないこと */
!isset( $_COOKIE['commenter_name'] ) ) {
header( 'HTTP/1.1 304 Not Modified' );
/* そして 304 Not Modified にも ETag は付けておく */
header( 'ETag: ' . $etag );
exit();
}
/* XHTML の MIME 型を設定 */
if ( ( isset( $_SERVER['HTTP_ACCEPT'] ) &&
preg_match( '/application\/xhtml\+xml/', $_SERVER['HTTP_ACCEPT'] ) ) ||
( isset( $_SERVER['HTTP_USER_AGENT'] ) &&
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 = ' <meta http-equiv="Content-Type"
content="text/html; charset=<$MTPublishCharset$>" />
';
}
/* HTTP Header 送信 */
header( 'Last-Modified: ' . gmdate( "D, d M Y H:i:s T", $lm_time ) );
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";
/* application/xhtml+xml 対応 UA には XML PI を送信する */
if ( !isset( $http_equiv_tags ) )
echo '<?xml-stylesheet href="<$MTBlogRelativeURL$>(Path to CSS)"
type="text/css"
title="スタイルシート"
media="screen"
charset="<$MTPublishCharset$>" ?>
<?xml-stylesheet href="<$MTBlogRelativeURL$>(Path to CSS)"
type="text/css"
title="代替スタイルシート"
media="screen"
charset="<$MTPublishCharset$>"
alternate="yes" ?>
<?xml-stylesheet href="<$MTBlogRelativeURL$>(Path to CSS)"
type="text/css"
title="印刷用スタイルシート"
media="print"
charset="<$MTPublishCharset$>" ?>
';
echo '<!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>
';
/* application/xhtml+xml 未対応 UA に対する後方互換処置 */
if ( isset( $http_equiv_tags ) )
echo $http_equiv_tags;
?>
<title>以下省略</title>
このエントリで書かれている内容は、今となっては時代遅れで陳腐な廃れた内容です。真に受けず、十分にご注意ください。
- タグ
- Movable Type
- MT4i
- obsolete
- PHP
- templates
- 公開日時
- 2005-02-11T09:10:00+09:00 @048
- 更新日時
- 2005-02-11T10:15:18+09:00 @093
- Permalink URI & TrackBack URL
- http://blog.drry.jp/2005/02/11/0910
コメント