PHP化

Movable TypeのPHP化を一部実行

ちょっくら「やる気」を出してみてPHP化。

基本的にはPHP化に向けてのメモの通りだが、実際にPHP化したのは

  • カテゴリー・アーカイブ
  • 月別アーカイブ
  • 個別エントリー

の3種のみ。

  • メインページ
  • アーカイブ(サイトマップ)

の2つは、PHP化する意味合いがあまり見いだせなかったので、html(xhtml)のままとした。 また、jsファイルの振り分けやMSIE向けCSSの振り分けは見送り。

プチはまりはあったけど、修正完了。

PHP化の作業メモ

ヘッダでHTTP_ACCEPTによりContent-Typeを振り分けて出力

またもやXHTML1.1 に正しい MIME Type をでの紹介例を参考に(というか、まんまコピペ)。 charsetも付与しつつ、xml宣言まで出力。

<?php
  if (isset($_SERVER["HTTP_ACCEPT"])) {
    $HA = explode(",", $_SERVER["HTTP_ACCEPT"]);
    if (in_array("application/xhtml\+xml", $HA)) {
      header("Content-Type: application/xhtml+xml; charset=UTF-8");
    } else {
      header("Content-Type: text/html; charset=UTF-8");
    }
  } else {
    header("Content-Type: text/html; charset=UTF-8");
  }
  echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>

php include()でファイル挿入

プチはまりしたのはこの部分。 PHP Manualには

読み込むファイルはまずカレントのワーキングディレクトリからの相対パスとしてinclude_path で探され、それから、カレントのスクリプトのディレクトリからの相対パスとしてinclude_path で探されます。 例えば、include_pathが .で、カレントのワーキングディレクトリが /www/ の場合、include/a.php を読み込んで、そのファイルの中に include "b.php" と書いてあったとすると、 b.php がまず /www/で探され、その後、 /www/include/で探されます。 ファイル名が ./ あるいは ../ で始まっている場合は、カレントのワーキングディレクトリからの相対パスとしてinclude_path で探されるのみとなります。

とあるが、今回、読み込ませようと思っているのは実は共通ファイルだから、相対パスだと都合がよろしくなく、絶対パスが使いたいわけで。 で、何度かトライ&エラーを繰り返すうちに

<?php include "<$MTBlogSitePath$>hoge/include.txt"; ?>

とMTタグを付与することでなんとか解決できた。

NoHarvesterプラグイン

chipple.net - Blog - Movable Type NoHarvester pluginからダウンロードして、NoHarvesterプラグイン・導入 (オラオラ)の説明に従って設定したら問題なく設置できた。 ありがたや。

はてさて、効果はいかに

追記

DTDをXHTML 1.1に変更 : Weblog : SimpleIsmで、よく分からないけど、多分in_array("application/xhtml+xml", $HA)の条件に合うUAではapplication/xhtml+xmlを返して、それ以外ではtext/htmlを返すと解釈したのだけど、Fxで確認してみると、まだMIME typeがtext/htmlだったとありますが、正規表現でのバックスラッシュ(\)をサンプルコードの中で書き忘れていた当方の記述漏れでした。 正しくは、in_array("application/xhtml\+xml", $HA)です(サンプルコードは修正済み)。 先方でコメントとかトラックバックを送れない感じなのでここに書き残しておきます。

ちなみに、先方のコードを利用するなら、

<?php
   if(preg_match('/[,^]\s*application\/xhtml\+xml\s*([,;$])/', $_SERVER["HTTP_ACCEPT"]) > 0) {
      header("content-type: application/xhtml+xml; charset=UTF-8");
   } else {
      header("content-type: text/html; charset=UTF-8");
   }
   echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>

ですね^^;

っていうか、↓で十分だった。

<?php
   if(ereg("application/xhtml\+xml", $_SERVER["HTTP_ACCEPT"])) {
      header("content-type: application/xhtml+xml; charset=UTF-8");
   } else {
      header("content-type: text/html; charset=UTF-8");
   }
   echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
?>

"PHP化"へのTwitter上でのコメントやRT

ツイートを取得できませんでした。