Category: b2evolution
b2evolution 1.10.2
August 20th, 2007久しぶりの更新。
このブログで使用しているb2evolutionというブログツールが1.10.2に更新されていたのでアップグレード。
Firefoxで見ると、ブログが文字化けする問題は、直っていなかったようなので、前回と同様に、
--- inc/MODEL/settings/_locale.funcs.php~ Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php Wed Apr 4 21:43:40 2007
@@ -869,7 +869,7 @@
if( ! empty($force_io_charset_if_accepted) )
{ // we want to force a specific charset:
if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
- || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+ || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
{
$req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
}
の修正をした。
また、これはいつもやっていることだけど、スタブファイルに勝手に.phpのsufixを付けて欲しくないので、
--- inc/MODEL/collections/_blog.class.php~ Sat May 26 02:44:38 2007
+++ inc/MODEL/collections/_blog.class.php Thu Aug 16 17:12:06 2007
@@ -504,7 +504,7 @@
{ // We want to force the dynamic page but the URL is not explicitly dynamic
// This is needed when a static page is taking control of domain.com/stub and we want an explicit link to the LATEST content, which can only be gotten at domain.com/stub.php
// fp> This creates a small problem with empty stubs (domain.com/.php). This should be fixed by using a fourth blog_access_type: default, index.php, stub, *default_stub* . Consequence: require the stub fied on blog properties form when stub mode is selected
- $blogurl .= '.php';
+ // $blogurl .= '.php';
}
return $blogurl;
も修正。
b2evolution 1.9.3
April 4th, 2007ここのブログで利用しているb2evolutionというブログツールが
ということなので、アップグレード。
1.9.2のバージョンに更新した時、IE等のブラウザで閲覧した場合は問題なかったのだが、何故かFirefoxで閲覧した場合、ゲストユーザ(一般ユーザ)になって、ここのブログを閲覧すると文字化けして読めなくなっていた。
一応、応急措置として、conf/_locale.phpを
$force_io_charset_if_accepted = 'UTF-8';
と直して、こちらの環境では問題は解決したように見えたのだが、その後も、Firefoxだと文字化けするとのコメントをいくつか頂いていた。
こちらの環境では、FirefoxのPreferenceから、Content→Advancedのダイアログで、Default Character EncodingをUTF-8に設定していた。
これだと、
| HTTP_ACCEPT_CHARSET | UTF-8,* |
|---|
として、リクエストヘッダがサーバ側に送られるようです。
しかし、Firefoxのデフォルトの設定では、
| HTTP_ACCEPT_CHARSET | ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|---|
となっている。
b2evolutionはクライアントに応じて出力する文字を切替えてくれるらしいのだが、どうやら、UTF-8
とutf-8
の大文字と小文字の違いを処理できずに問題が生じていた模様・・。
とりあえず、conf/_locale.phpは、
$force_io_charset_if_accepted = 'utf-8';
としておき、ケースの違いで問題が起こらないように、
--- inc/MODEL/settings/_locale.funcs.php~ Sat Mar 10 23:15:16 2007
+++ inc/MODEL/settings/_locale.funcs.php Wed Apr 4 21:43:40 2007
@@ -869,7 +869,7 @@
if( ! empty($force_io_charset_if_accepted) )
{ // we want to force a specific charset:
if( ! isset($_SERVER['HTTP_ACCEPT_CHARSET']) // all allowed
- || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
+ || preg_match( '~\b(\*|'.$force_io_charset_if_accepted.')\b~i', $_SERVER['HTTP_ACCEPT_CHARSET'] ) )
{
$req_io_charset = $force_io_charset_if_accepted; // pretend that the first one has been requested
}
として見ることにする。
b2evolution 1.9.2
February 8th, 2007このブログを作成しているツール b2evolutionの最新バージョンがリリースされたようなので、今まで使用していた1.8.6のバージョンからアップグレードしてみた。
1.8.7 Tokyoの方は、Super Stableの品質だそうだけど、今回は、1.9.2 Kyotoのバージョンをインストール。
データベースの更新後、ブログにアクセスしてみると、ゲストユーザで閲覧すると、予想通り、日本語の部分が???のようになって正常に表示されていないので、
- conf/_locale.php
$evo_charset = 'utf-8';
$db_config['connection_charset'] = 'utf8';
のように変更。
しかし、なぜかFirefox (2.0.0.1)でアクセスしたら、なぜか、まだ???の症状は直っていない・・
(IE 7、Opera 9、w3m等では問題なかった)。
いろいろやってみたところ、上記、conf/_locale.phpを
$force_io_charset_if_accepted = 'UTF-8';
のように修正してみたら(UTF-8は大文字)、問題は納まった?模様。
サイトマップ生成ツール for b2evolution
January 7th, 2007いつぞや書いたこのブログのデータベースから動的にサイトマップを生成するスクリプトが、いつのまにか動作してなかった*1ので修正してみた。
こちらの環境(b2evolution 1.8.6)では一応、動作しています。
- *1 多分、1.8系列に切替えた辺りからだと思う。
関連情報
Security Alert: import-mt.php
December 1st, 2006Link: http://b2evolution.net/news/2006/11/30/security_alert_import_mt_php
昨日から、このブログ内の
inc/CONTROL/imports/import-mt.php
のファイルへのアクセスが異様にあると思っていたら、どうやら、
ということらしい。
どこから嗅ぎつけてくるのか不明だけど、複数のIPアドレスからアクセスがある。
b2evolution 1.6以降のバージョンでは、上記、
のファイルは削除しておいた方が良さそう。import-mt.php
なお、この問題は、1.8.6のバージョンのリリースでは、修正される模様。
b2evolution 1.8.5
November 12th, 2006ここのブログは、現在、b2evolutionというツールで生成しています。
先日、その1.8.5のバージョンがリリースされました。
私は、今まで、1.8.2のバージョンを使っていたので、更新分だけのファイルをダウンロードし、既存のものに適用して更新しました(上記URLからたどれます)。
1.8.2から1.8.5への移行で特に問題に感じた事はありません。
日本語周りの強化は、
が参考になりそうです。
301で転送したらフィードURLが変わっても購読者数は変わらなかった
August 28th, 2006前回、b2evolutionを、1.8のバージョンにアップグレードした際、XML FeedsのURLが変更されていることに気付いた。
例えば、0.9.xの古いバージョンでは、
- (A)
http://www.xdelta.net/blog/xmlsrv/atom.php?blog=2
だったのに対し、新しいものでは、
- (B)
http://www.xdelta.net/blog/FreeBSD?tempskin=_atom
となっていた。
従来通り、blog/xmlsrv/atom.phpのファイルも用意されており、(A)のURLにアクセスすると、(B)のURLにアクセスした時と、同一内容のフィードが得られる。
ただ、同じ内容のコンテンツが、別のURLでアクセスされるのは、なるべく避けたい。
それに、Bloglines等のRSSアグリゲータは、UserAgentに購読者数を含めてくるので、これだと、全く同じフィードなのに、(A)の場合は購読者数9人、(B)の場合は購読者数が1人といった具合になってややこしい。
駄目元で、.htaccessに、
RewriteCond %{QUERY_STRING} ^blog=2$
RewriteRule ^blog/xmlsrv/(atom|rss|rdf|rss2)\.php$ /blog/FreeBSD?tempskin=_$1 [R=301,L]
RewriteCond %{QUERY_STRING} ^blog=2$
RewriteRule ^blog/xmlsrv/(atom|rss|rdf|rss2)\.comments\.php$ /blog/FreeBSD?tempskin=_$1&disp=comments [R=301,L]
と記述して、(A)のURLにアクセスしてきた際、(B)のURLに301で転送して見ることにした。
しばらく期間を置いてログを見てみたところ、
65.214.44.29 - - [15/Aug/2006:17:43:46 +0900] "GET /blog/xmlsrv/atom.php?blog=2 HTTP/1.1" 301 257 "-" "Bloglines/3.1 (http://www.bloglines.com; 10 subscribers)" 65.214.44.29 - - [15/Aug/2006:17:43:46 +0900] "GET /blog/FreeBSD?tempskin=_atom HTTP/1.1" 200 8168 "-" "Bloglines/3.1 (http://www.bloglines.com; 10 subscribers)"
と購読者数が合計されている。(A)+(B)の計10になった。
(滅多に購読者数が増えないブログだから、そのように推定しています)
どうやら、当初の意図通りに事が運んだ模様(ついでに、livedoorのアグリゲータでも確認)。
その後、
65.214.44.29 - - [28/Aug/2006:16:22:11 +0900] "GET /blog/FreeBSD?tempskin=_atom HTTP/1.1" 200 8412 "-" "Bloglines/3.1 (http://www.bloglines.com; 11 subscribers)"
と、(B)のURLのみのアクセスになり、いつのまにか、旧(A)のURLではアクセスがなくなりました。
(この間、一人購読者数が増えています)
試しに、自分のアカウントのBloglinesのリーダを見てみたら、旧URLで登録してあったものが、新URLに置き換わっていました。
でも、302とかじゃ、どうなるのかは未確認です。
PHP4からPHP5に乗り換えた
July 23rd, 2006先日、www/mediawikiのportを更新して、MediaWikiを1.7のバージョンのものにしようとしたが、MediaWiki 1.7はPHP4には対応していなかったため、やむを得ず、www/mediawiki16のportに切替えた。
この間、更新したb2evolution 1.8-betaは、PHP5には対応しているようだし、そろそろ全面的にPHP5の環境に乗り換えるのも悪くないと考え、今回、思い切って、www/php4からwww/php5のportに移行してみました。
portupgrade等を使って置き換える方法もあると思うけど、今回は、一旦、全部PHP関係のportsを削除し、新しいバージョンを新たにインストールするという手法を選びました。
まず、備忘のため、一応、
# cp /var/db/pkg/php4-4.4.2_2/+REQUIRED_BY /var/tmp/
とインストール済みのPHP4に依存するportsを控えておく。
続いて、
# cat /var/db/pkg/php4-4.4.2_2/+REQUIRED_BY | xargs pkg_delete -f # pkg_delete php4-4.4.2_2
とPHP4とそれに依存するportsを削除。
そして、
# portinstall lang/php5
と、PHP5のportをインストールし*1、先ほどバックアップした情報を参考に、
# portinstall lang/php5-extensions
を利用して、(必要な)主だった拡張モジュールをインストール。
後は、先ほど削除したそれ以外のportsを、インストールし直し、サーバを再起動する*2だけです。
- *1 以前にも書いたように、PHPのportsは標準では、CLI版とCGI版がビルドされて、Apacheモジュールは標準ではコンパイルされないので注意。
- *2 その前に、
/usr/local/etc/php.iniを新たに作成するのも忘れずに(新しくインストールされた/usr/local/etc/php.ini-recommendedをテンプレートとして使った)。
ただ、従来、.htaccessなどで、
<Files "FreeBSD"> SetHandler php-script </Files>
と記述し、PHPスクリプトとしてハンドルしていたものは、
<Files "FreeBSD"> SetHandler php5-script </Files>
のように、書き直さなければ駄目でした(でないと、ソース丸見えになった)。
b2evolution 1.8にアップグレード
July 18th, 2006このブログは、b2evolutionというソフトで運営しているんだけど、今まで使用していたバージョン0.9.xの系列から、先日リリースされた
に移行してみました(今回は、portの方は使用しなかった)。
インストール自体は、単に、必要なファイルをドキュメントルート以下に展開するだけで、済むんだけど、その中のinstallディレクトリにアクセスして、データベースの更新を行う前に、前のバージョンのデータは必ずバックアップをとっておくこと。
0.9.xでのコンテンツの文字コードは、ちょっと特殊な格納の仕方をしているので、いきなり1.8に更新にすると、全部、日本語が文字化けするようになります(しかも、更新後は、元のバージョンには戻せない)。
この点クリアしてしまえば、後は微調整程度です (といっても、内部的にだいぶ変わっているので、試行錯誤中なのだが…)。
b2evolution News - The NEW central antispam blacklistW
May 15th, 2006Link: http://b2evolution.net/news/2006/05/12/the_new_central_antispam_blacklist
b2evolutionの機能であるAntiSpam Deluxeの中央データベースがしばらくの間、停止してたけど、ようやく再開した模様。
まもなく、0.9.xブランチでの最終バージョン0.9.2がリリースされる予定だけど、現在使用してる0.9.1ではでは、上記URLの説明にあるようにconf/_advanced.phpの最後の方に
$antispamsrv_host = 'antispam.b2evolution.net'; $antispamsrv_port = 80; $antispamsrv_uri = '/evonetsrv/xmlrpc.php';
を書き加え、さらに、b2evocore/_functions_antispam.phpをこれに対応したものにに置き換える必要がある。
- 追記2006/05/19
-
0.92がリリースされましたね。
getElementsByClassName
April 19th, 2006ブログの見通しが悪いような気もしていたんで、JavaScriptで、各記事を閉じたり開いたりするボタンを付けてみた。
即興で作っただけだけど、主要な関数に、
で紹介されているgetElementsByClassName()を使わせてもらっている。
AD.JPがスパムリストに加えられた
April 18th, 2006なんやら、先程、b2evolutionの機能AntiSpam Deluxeで、拒否ドメインのデータベースを中央と同期したら、.ad.jpが追加されてしまった。
ま、確かに知らない人が見れば、広告臭いURLにも見える。
でも、コメント等に、このURLが含まれていると、書き込みが拒否されるわけになる。
放置していても何なんで、忘れない内に、削除しようと思ったけど、拒否ドメインのリストが膨大になるせいか、PHPのmemory_limitに達して、処理が中断してしまい*1、ブラウザからは出来ない。
直接、MySQLの方から、
mysql> DELETE FROM evo_antispam WHERE aspm_string REGEXP '^\\.ad\\.jp$';
と削除しときました。
- *1 この辺は、b2evolutionの開発版では、改善されているらしい。
b2evolutionをTechnoratiのTagに対応
April 11th, 2006先日、書いたようにTechnoratiのクローラーは、このブログが配信しているRSS 1.0(RDF)、RSS 2.0もしくはAtomのフィードのカテゴリを汲み、Tag
と認識してくれるようで、必ずしも、アンカーにrel="tag"という属性は必要なかった。
でも、それはたまたま上記フィードのいずれかから解釈してくれたに過ぎず、生成されたHTMLの情報だけでは判断できない。
逐一手動でrel="tag"のアンカーを埋め込んだり、あるいは、それを簡易に入力できる方法もあるようだけど、余分な作業になってしまうし、ともすると、忘れがち。
b2evolutionには、投稿時の必須入力事項として、「メインカテゴリ」を選択しなければなりません。この情報を利用して、rel="tag"のアンカーを自動生成するようにしてみました。
任意入力項目である「付加カテゴリ」については、あえて、切り捨てることにしました。
rel="tag"の仕様では、どちらが「メイン」でどちらが「付加」なのかが判断できない。- あまり、ごちゃごちゃタグをつけたくなかった。
- そもそも、メインカテゴリは、その投稿を分類する上で、最もふさわしいものとして選択されているはず。
- 便宜上、2つのカテゴリにまたがっていて、一つから離れることで支障があるなら、新たなカテゴリを設けて、そこに分類するという手もある。
というのが主な理由です。
アンカーのリンク先は、
http://technorati.com/tags/[Tag Name]
というふうになりますが、このブログでは、カテゴリ名を日本語で表しているものが多く、そのままカテゴリ名を[Tag Name]に流用した場合、問題が起こる可能性もあるので、念のため、URLエンコードすることにします。
そこで、予め、
--- b2evocore/_functions.php.orig Wed Dec 14 04:40:03 2005
+++ b2evocore/_functions.php Tue Apr 11 13:48:03 2006
@@ -131,6 +131,11 @@
$content = str_replace("'", ''', $content );
break;
+ case 'urlencode':
+ // RFC1738
+ $content = rawurlencode($content);
+ break;
+
default:
die( 'Output format ['.$format.'] not supported.' );
}
と本体部分に修正を加えます。
後は、
<?php
echo '<a rel="tag" href="http://technorati.com/tags/',
$Item->main_category('urlenocde'), '"',
' title="Technorati Tag: ',
$Item->main_category('htmlattr'), '">',
$Item->main_category('htmlbody'), '</a>';
?>
などとスキン部分(_main.php)に適宜、追加を加える程度です。
コンテント ネゴシエーション経由でPHPにリクエストを渡すのをやめた
April 5th, 2006この間まで、PHPスクリプトをデフォルトの
AddType application/x-httpd-php .php
ではなく、
SetHandler php-script .php AddType text/html .php
と設定して、扱うようにしていた(過去の経緯については、p89参照)。
このブログのように、PHPスクリプト自体に.phpという拡張子が付いてるにも拘らず、それを含めないような形でアクセスさせるようにしている場合、接続クライアントが、
GET /blog/FreeBSD Accept: text/html,*/*
のようにアクセスして来れば問題ないけど、
GET /blog/FreeBSD Accept: text/html
とワイルドカードを含めず、Acceptタイプを限定してきた場合、サーバ側には、FreeBSD.phpは存在するけど、それのタイプは、application/x-httpd-phpであって、クライアントの要求するtext/htmlのタイプではない。他に代替するものがないと、
406 Not Acceptable
というエラーをサーバが返してしまうので、それを回避するため上記のような設定をした(ただし、ACCEPTヘッダにワイルドカードを付けずにリクエストを送信してくるクライアントは、Ask Jeeves/Theomaなど、ごく一部)。
通常、以上で問題ないはずなんだけど、b2evolutionには、静的なHTMLファイルを生成する機能があって、一番アクセス頻度が高いと予想されるトップ ページの部分を、予め静的なファイルとして、書き出しておくことが出来る(b2evolutionで静的なファイルを生成できない場合の回避策は、p88参照)。
問題は、同一のURLで、これらを使い分けようとすると生じて来る。
この場合、サーバ上には、同じタイプ(text/html)の
FreeBSD.phpFreeBSD.html
という2つのファイルが存在するようになって、
GET /blog/FreeBSD
とした場合、どれを選択していいのか判らなくなるからである。
mod_writeを使って、
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{PATH_INFO} ^$
RewriteRule ^blog/FreeBSD$ /blog/FreeBSD.html
と引数がない場合は、静的な方(FreeBSD.html)を表示しようとしても、なぜかPHPの方に横取りされてしまって、機能しなかった。
もっとも、静的なHTMLの方は、FreeBSD.htmlといった名前にしておく必要もないので、
static-FreeBSD.html
と改名し、ついでに、FreeBSD.phpの方も拡張子を取り除いて、FreeBSDとし、
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{PATH_INFO} ^$
RewirteRule ^blog/FreeBSD$ /blog/FreeBSD.html
RewirteRule ^blog/FreeBSD$ /blog/static-FreeBSD
<Files ~ ^FreeBSD$> SetHandler php-script AddType text/html </Files>
のように設定したら、とりあえず、意図した動作になった。
(これは要するに、コンテント ネゴシエーションで、リクエストをPHPに渡すのをやめたということだな…)
せっかく、Apacheに、コンテント ネゴシエーションの機能を導入しているので、静的なファイルの方を
static-FreeBSD.html.jastatic-FreeBSD.html.ja.gz
といろいろ作って、遊んでたけど、
Content-Type: application/x-gzip Content-Language: ja
なもの(上記の場合では、FreeBSD.html.ja.gz)は、ある種のプロキシ経由じゃ、閲覧できないみたい。
rel="tag"というMicroformat
April 5th, 2006Technoratiというブログ検索サイトがある。b2evolutionの方でも、新規に記事を投稿した際、そこに、ピンを送って更新を知らせることが出来る。
Technoratiの特徴として、
のように、各ブログの記事をTag
という形で分類・整理して、興味のある分野を閲覧する際の便宜をはかったものがある。
このTag
というのは、個々の投稿者が自由に記事中に挿入することが出来る種類のものである。
Tag
として認識させるためには、
<a href="http://technorati.com/tags/タグ名" rel="tag">タグ名</a>
という形式のリンクを貼るだけでよい。
Technoratiにピンを打った後やって来るクローラが、該当記事を収拾した際、rel="tag"という属性が付加されたアンカーについては、タグだと判断する仕組み。
ただし、どんなリンクでもよいわけではなく、
- アンカーに、
rel="tag"という属性値の指定 - アンカーが示すURLの最後のPATH†に、
Tag
を表す文字列が存在すること- このPATH情報とリンク文字が異なる場合、PATHの情報の方を優先
- クエリ文字列は取り除かれる
という条件を充たす必要がある(詳細は、rel-tag - Microformats参照)。
- † 最後に現れるスラッシュ
/
以降の部分の文字列のこと。
リンク先は、必ずしも、Technoratiのサイトを指す必要はなく、
<a href="http://www.example.com/path/to/タグ名" rel="tag">タグ名</a>
のようにしてもよいけど、<a>〜</a>に挟まれたリンク文字と、URLの最後のPATH名が異なる場合は、PATH名の方が優先される。
つまり、
<a href="http://www.example.com/keywords/music" rel="tag">音楽</a>
のように書いたタグは、音楽
ではなく、music
として認識される。
また、URLの
以降のクエリ文字列は取り除かれるので、?
<a href="http://www.example.com/tags?name=Movie" rel="tag">Movie</a>
と書いたとしても、この場合、正常に認識してくれない(クエリ文字列を取り除いた最後のPATHであるtags
を示すタグといったおかしなことになる)。
b2evolutionにも、個々の記事を共通したカテゴリに分類する機能があるけど、単にカテゴリ ページへのリンクにrel="tag"の属性を付けるだけでは、Technorati上で、意図した内容の他のブログとは関連付けることが出来ない。
なぜなら、b2evolutionでは、カテゴリ ページへのリンクは、クエリ文字列の形をとるからである(しかも、カテゴリは、それを表す文字ではなく、数値IDで参照される)。
例えば、b2evolution
というTag
を設けようと思っても、
<a href="http://www.xdelta.net/blog/FreeBSD?cat=19" rel="tag">b2evolution</a>
のようになってしまうから、Technoratiでは、FreeBSD
というTag
として扱われてしまう。
そもそも、手動で逐一リンクを貼っても、Tag
は実現できるし、ちょっと修正すれば、もっと何とかなりそうだと思ってたところ、既に、b2evolutionに便利そうな機能を導入してる人がいた。
悪くないかも。
あと、話は違うけど、テクノラティ(technorati.jp)の方に、
HTMLの使用が許可されていないブログサービスをお使いで、カテゴリーを独自につけることができるブログサービスをお使いの方は、ブログ記事を書く際に「カテゴリー」をつけることでテクノラティのタグ検索に検索されるようになります。
と書いてあるのが気になった。
