Ktai Entry マニュアル

よくある質問と答え

Ktai Entry に関して、附属ドキュメントに掲載されていない疑問点やノウハウなどを掲載します。ここにない質問があれば、まず、附属ドキュメントをよく読んでみてください。それでも解決できなければ、作者にメールするか、WordPress 日本語フォーラム の「プラグイン」で質問してください。

インストール関連

プラグインを有効にすると "Fatal Error" になる
サーバーの PHP バージョンが 5.0.0 以降であるか確認してください。Ktai Entry は PHP 4 には対応していません。以下のエラーが出るときは確実にサーバーの PHP が 4.x です。
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’
in /****/wp-content/plugins/ktai-entry/ktai_entry.php on line 63
サーバーが PHP5 を提供していても、自身が利用しているサービス/ドメイン名では PHP4 のままであることも多いので、よく確認してください。
管理画面の設定をどう変更すればいいか分からない
管理画面の「メール投稿」での設定は変更しなくてもそのまま使えます。メールサーバーの設定さえきちんと行えばデフォルトで動くように設計されています。
外部メールボックスの読み込みを cron で行なわせたい
手動でメールボックス確認させる スクリプト retrieve.php をウェブ経由でアクセスする (wget コマンド等) 場合は _wpnonce 引数が必須ですが、コマンドライン版 PHP で retrieve.php を起動させる場合は不要です。このため、crontab は以下のように記述してください。なお、/PATH/TO の部分は適宜修正してください。
2,17,32,47 * * * * /usr/bin/php /PATH/TO/WP/wp-content/plugins/ktai-entry/inc/retrieve.php
※0,15,30,45 ではないのは、他の cron ジョブが使わなさそうな時刻にするためです。
※"retrieve" のスペルは間違えやすいので、十分注意してください。
PHP がセーフモードで動作している場合、どうすればいいか
PHP がセーフモードで動作している場合、添付ファイルが WordPress にアップロードされないことがあります。あらかじめ、日付別のアップロードフォルダー ( wp-content/uploads/2009/01/ など) を作っておくか、ktai-entry/inc/post.php だけを CGI 動作させるように設定してください。例えば、xrea の場合、「PHPをCGIとして動かす方法について」を参照ください。

仕様に関して

添付できる画像は何枚までか
スクリプト側では特に制限を設けていません。au 携帯は5枚まで、SoftBank 6-3 シリーズだと1枚だけなど、端末側の制約の方が大きいでしょう。ただし、大きい画像を複数枚添付すると、PHP のメモリ制限をオーバーして異常終了することがあります。PHP のメモリ制限は 32MB 以上にしておくことをおすすめします。(WordPress 2.5 以降は、自動的にメモリ制限が 32MB 以上に設定されます)
画像以外を添付できるか
現状では、JPEG, PNG, GIF 画像以外の添付には対応していません。動画の添付は将来のバージョンで検討します。
画像のファイル名はどうなるか
原則として、元のファイル名そのままです。同じファイルが存在するときは _2, _3, ... と追番がつきます。ファイル名に使用できない記号類は削除します。使える記号は、ハイフン(-)、アンダースコア(_)、ドット(.)、チルダ(~)、プラス(+) だけです。
サーバーへの負荷はどれぐらいか
外部メールサーバーに随時アクセスする場合でも、今どきのサーバーならば、POP アクセスを5分間隔に詰めてもさほど負荷にならないはずです。投稿専用メールアドレスならば、基本的にメールボックスが空なので数秒でチェック終了します。しかし、他のメールと兼用しているメールボックスで、常に数千通ぐらい溜っている場合は、5分間隔だとまずいかもしれません。
メール着信時に投稿スクリプトを起動する場合は、CLI 版 PHP のプロセスが走るだけなので非常に軽いでしょう。
不許可アドレスからの投稿はどうなるか
不許可アドレスから投稿があった場合、以下のように処理されます。
投稿を認証するパスフレーズはないのか
他のツールでは、メール本文や題名に特定のパスフレーズ (文字列) があるかどうかで投稿を認証する仕組みがありますが、Ktai Entry では採用していません。投稿受け付けメールアドレスを秘匿すること、差出人メールアドレスを WordPress 登録ユーザーに限定することで十分スパム対策になると考えています。両方のアドレスをある程度複雑にしておけば、スパマーに詐称されることはないと思います。
絵文字投稿はどのキャリアに対応しているか
絵文字投稿は、キャリアおよび投稿送信先メールボックスによって対応が異なります。 残念ながら、これ以外の場合は、メールをインターネットに中継する時点で絵文字を〓 (ゲタ)、? (はてな) やテキスト ([人差し指] など) に変換してしまいます。メールサーバーに到着した時点で絵文字は失なわれていて、Ktai Entry では認識できないため、絵文字投稿はできません。
ログを日本語化したい
ログ機構は、文字化けして内容が読めなくなることを防ぐため、デフォルトでは英語としていますが、ktai_entry.php の 101 行目のコメントを外して「load_plugin_textdomain('ktai_entry_log', false, ...」を有効にすると日本語化できます。文字コードはウェブログの文字コード (UTF-8 等) と同じです。ただし、メールサーバーに返答するためのメッセージ、および外部のメールボックスから返されたメッセージは英語のままです。

問題が発生したときは

投稿処理がされない
さまざまな原因が考えられます。以下をそれぞれ確認してください。 原因が不明の場合、ktai_entry.php の 32,33 行目にある define('KTAI_LOGFILE', 'logs/error.log'); define('KTAI_ENTRY_DEBUG', TRUE); のコメントを外して詳細のログ記録を有効にしてみてください。これで問題発生個所が分かるかもしれません。
画像が保存されない
アップロードディレクトリー (通常は wp-content/uploads) のオーナー (所有者) および パーミッション (アクセス権限) を確認してください。WordPress が自動作成した場合、オーナーがウェブサーバー (www-data など) で、パーミッションは 757 もしくは 777 になっています。755, 757 の場合、「メール着信したら投稿スクリプトを起動」方式ではスクリプトの実行ユーザーが HOME ディレクトリーのオーナーとなり、ディレクトリーのオーナーと異なるため、ファイルが保存できないことがあります。ディレクトリーの権限を 777 に変更してみてください。
PHP のセーフモードを利用している場合など、サーバーの設定によってはディレクトリーの自動生成ができない場合があります。この場合は、手動で wp-content/uploads/2008/10/ のように年月ごとのディレクトリーを作成し、パーミッションを 757 等にしておいてください。
画像が表示されない
LightBox 用に、rel="lightbox" 属性を追加する」を適用している場合、バージョン 0.8.0 までの附属ドキュメントに記載していたコードはバグっているので、このドキュメントに掲載しているコードに差し替えてください。
Lightbox 用カスタマイズではないが、同様にフィルター関数を使ったカスタマイズをしている場合、フィルター関数がきちんと値を返しているか確認してください。返り値がないと、フィルター結果が「空」になるため不具合が出ます。
絵文字が出ない
絵文字は Ktai Style の絵文字フォーマットである <img localsrc="XXXX" /> という書式で保存されます。このため、Ktai Style をインストールしていないと単なる img 要素となり、何も表示されません。Ktai Style をインストールすれば、携帯電話からは各キャリアの絵文字に、PC からはテキストに変換されて表示されます。
au, ウィルコムは投稿受け付けするメールサーバーを問わず絵文字が使えますが、ドコモ、ソフトバンク、イー・モバイルは Gmail, Yahoo! メール など、iモード絵文字がそのまま送信できるメールサーバー限定です。他の端末・サーバーでは絵文字が 〓 (ゲタ)、? (はてな) やテキスト文字列に変換されてしまうため、絵文字として認識されません。
動作ログに記録が残らない
define('KTAI_LOGFILE', 'logs/error.log'); のコメントを外して有効にした場合に動作ログが有効になりますが、パーミッションの設定によっては、ログが作られない場合があります。特に、外部メールボックス読み込み方式と、メール着信でスクリプトを起動する方式を併用している場合は、両者でプロセスオーナーが違うため、問題が起きやすいです (前者は Apache, 後者は HOME ディレクトリーのオーナー)。あらかじめ以下のようにしてログファイルを作成しておくのが無難です。
mkdir logs
chmod 0777 logs/;
touch logs/error.log
chmod 1666 logs/error.log
キーワードタグが重複されて生成された
WordPress 2.6.1 より前のバージョンでは、タグ機能の仕様により、タグ名から自動生成されるタグスラッグを別のものに変更したときに、同じタグ名 (で、自動生成されるタグスラッグを持つもの) が生成される不具合があります。Ktai Entry のタグ入力機能でも同じ問題が発生します。例えば、「変なモノ」タグに「funny」というスラッグを割り当てている場合、「TAG: 変なモノ」というコマンドを使うと「変なモノ」タグがもう1つ生成されてしまいます。これを避けるには、コマンドではタグスラッグを用いて「TAG: funny」と入力しなければなりません。(WordPress 2.6.1 以降で改善されたものの、条件によってはまだ現象が発生することがあります。)
また、ウェブログの文字コードが UTF-8 の場合、波ダッシュ (〜) を持つタグで問題が発生します。Windows で全角チルダ U+FF5E (~) を含むタグを作った場合、メールで入力した波ダッシュは U+301C の「〜」に変換されるため、違うタグと認識されて新たにタグを生成してしまいます。
画像に白い枠がつかない
Internet Explorer 5.5 以前および、Internet Explorer 6 の互換モードでは、スタイルシートの解釈に問題があり、画像周囲の枠がつきません。使用しているテーマの header.php を編集して、先頭に <?xml... という行 (XML 宣言) があれば、削除してください。これにより、Internet Explorer 6 では標準準拠モードとなり、正しく閲覧できます。Internet Explorer 5.5 以前のユーザーに対しては、IE 6 以降にアップグレードしてもらってください。
投稿時刻指定すると時刻が狂う
投稿先のサーバーが海外にある場合など、サーバーのタイムゾーンが投稿者の現地時間と異なる場合、投稿時刻の指定が狂うことがあります。これは、時刻指定コマンドが、サーバーのタイムゾーンに従って時刻を解釈するためです。これを回避するには、時刻指定にタイムゾーン (+0900 などの文字列) を付加してください。例えば、日本時間の 2008年7月11日00時00分 を強制する場合は「DATE:2008-07-11 00:00+0900」とします。

メール投稿に関するコツ

コマンドを単語登録する
カテゴリー指定コマンドや画像回転コマンドを、あらかじめ携帯電話で単語登録しておくと便利です。例えば、以下のような例が考えられます。
独自フィルター ktai_image_link を使えば、Ktai Entry を改造しなくても可能です。my-hacks.php に以下のコードを書いてください。※バージョン 0.80 までに添付していたコードはバグっていたので以下のものに差し替えてください。
function ktai_rel_lightbox($html, $id, $size) {
	if (preg_match('/rel=["\']/', $html, $match)) {
		$html = str_replace($match[0], $match[0] . 'lightbox ', $html);
	} elseif (! preg_match('/rel=/', $html)) {
		$html = str_replace('<a ', '<a rel="lightbox" ', $html);
	}
	return $html;
}
add_filter('ktai_image_link', 'ktai_rel_lightbox', 10, 3);
投稿許可アドレスを別途定義する
ウェブログ登録ユーザーのメールアドレス以外から投稿を受け付けたいときは、ktai_validate_address フィルターを使うと可能です。my-hacks.php に以下のコードを書いてください。$authors 配列は、許可するメールアドレスと対応するユーザー ID を示すものです。適宜修正してください。メールアドレスは、WordPress の登録ユーザーのものであっても構いません。
function ktai_another_author($user_id, $address) {
	$authors = array(
		'foo@example.com' => 1,
		'bar@example.net' => 4,
	);
	return isset($authors[$address]) ? $authors[$address] : $user_id;
}
add_filter('ktai_validate_address', 'ktai_another_author', 10, 2);
投稿者は固定したい
メールアドレスから決められた投稿者ではなく、誰か1人に投稿者を固定させたいときは、ktai_validate_address フィルターを使うと可能です。my-hacks.php に以下のコードを書いてください。携帯電話メールアドレスをユーザー登録したものの、投稿者は普段のものとしたい場合に使えます。以下の例はユーザー ID = 1 のユーザーに固定させる場合です。
function ktai_fix_author($user_id, $address) {
	return $user_id ? 1 : 0
}
add_filter('ktai_validate_address', 'ktai_fix_author', 10, 2);
登録ユーザーの一部は投稿不可としたい
ウェブログ登録ユーザーであってもメール投稿を禁止したい場合、ktai_validate_address フィルターを使うと可能です。my-hacks.php に以下のコードを書いてください。$restricts 配列は、禁止するユーザー ID を示すものです。適宜修正してください。
function ktai_restrict_author($user_id, $address) {
	$restricts = array(2, 10);
	return in_array($user_id, $restricts) ? 0 : $user_id;
}
add_filter('ktai_validate_address', 'ktai_restrict_author', 10, 2);
講読者はすべてメール投稿可能としたい
PC の管理パネルでは、講読者 (subscriber) に投稿権限はありませんが、メール投稿は許可したい場合、ktai_post_status フィルターを使うと可能です。my-hacks.php に以下のコードを書いてください。
function ktai_allow_mailpost($status, $can_pending, $user_id, $address) {
	if (! $user_id) {
		return $status;
	}
	$user = get_userdata($user_id);
	if ($user->user_level >= 1) {
		$status = 'publish';
	}
	return $status;
}
add_filter('ktai_post_status', 'ktai_allow_mailpost', 10, 4);
メール投稿されたら管理者にメールが届くようにしたい
Ktai Entry 0.9.0 からは、管理パネルで設定できるようになりました。
VGA 以上のサイズなら画像を右回転させたい
通常、携帯電話のカメラ画像は、モバイルモード (VGA未満) の場合縦向き (ポートレイト) で、デジタルカメラモード (VGA 以上のサイズ) なら横向き (ランドスケープ) となります。この場合、端末を縦方向のまま VGA 以上の画像サイズで撮影すると、左回転した状態になってしまいます (端末によっては右回転)。画像を縦向きにしたい場合は、右回転 (または左回転) させる必要があります。都度回転コマンドを入れるのが面倒な場合、ktai_image_rotate フィルターを使うと自動回転が可能です。ktai_rotate_vga.php というファイル名で新規テキストファイルを作り、以下のコードを保存し、プラグインディレクトリー (wp-content/plugins/) にアップロードして「Ktai Entry Hook (Rotate VGA)」というプラグインを有効にすれば、画像サイズを認識して画像を自動回転させます。
<php 
/*
Plugin Name: Ktai Entry Hook (Rotate VGA)
Plugin URI: http://wppluginsj.sourceforge.jp/ktai_entry/qa/
Version: 0.9.0
Description: Rotate large images than VGA automatically.
Author: IKEDA Yuriko
Author URI: http://www.yuriko.net/cat/wordpress/
*/
ktai_rotate_vga($rotations, $rot_direction, $images) {
	if (count($rotations) && function_exists('imagecreatefromstring')) {
		for ($i = 0 ; $i < count($rotations) ; $i++) {
			if (! isset($rotations[$i]) || $rotations[$i] != 'N') {
				continue;
			}
			$image = imagecreatefromstring($images[$i]['body']);
			if (! $image) {
				continue;
			}
			$width  = imagesx($image);
			$height = imagesy($image);
			if ($width > $height && $width >= 640 && $height >= 480) {
				$rotations[$i] = 'R';
				// $rotations[$i] = 'L';
			}
		}
	}
	return $rotations;
}
add_filter('ktai_image_rotate', 'ktai_rotate_vga', 10, 3);
?>
なお、端末によっては、撮影時のカメラ位置を判断して適切な向きに直すので、上記のコードは不要です。

以上