Subversionによるソースコード管理

ソースコードを管理する必要が出てきたので、Subversionを利用することにしました。
そこで、基本的なことを勉強するために、

を購入し、熟読しました。読むまでは、

複数のプログラマが同時に更新した場合はどうなるのだろうか?
バイナリファイルでも利用できるのだろうか?

等の疑問がありましたが、これらについてすべて丁寧に解説されていました。
早速Cent OS 4.5に最新版をソースからコンパイルしてインストールしました。

Zend FrameworkのHTTPリクエストオブジェクト

開発から遠ざかっていたので、久々の投稿になりますが、今回は新たにZend Frameworkを使って開発することになりました。いきなりマニュアルを読むのは退屈なので、まずは、

あるいは、

を読み、後ほどプログラマ向けリファレンスガイドを読むことにしました。
そこで、HTTPリクエストオブジェクトでいきなり躓いたので、メモしておきます。上記の書籍によれば、HTTPリクエストオブジェクトでは、
$_GET / $_POST
は使わず、それぞれ
getQuery() / getPost()
を使うルールことになっているそうなのだが、実際に、

$request = $this->getRequest();
$foo = $request->getQuery(’foo’);

として、
http://www.example.com/index/index/foo/1/bar/1
にアクセスしても、データは取得できませんでした。もちろん、
http://www.example.com/index/index?foo=1&bar=1
にアクセスすれば、データは取得できます。やむを得ず、

$foo = $this->_getParam(’foo’);
$bar = $this->_getParam(’bar’);

としてひとまず無事解決しました。(ちなみに面倒だったので、Postは試していません。今回はGetのみです。ごめんなさい。)そこで、いろいろと実験してみてわかったのは、以下の通りです。

これはNG

$foo = $_GET[’foo’];

これらはOK

$request = $this->getRequest();
$foo = $request->getParam(’foo’);

// あるいは

$foo = $this->_getParam(’foo’);

mod_rewriteによる静的URL

洋楽歌詞@Tube365では、PHPによる動的URLでプログラムを組んだのですが、検索エンジン最適化(Search Engine Optimization:SEO)の観点ではよろしくないとのことで、Apacheのmod_rewrite機能を利用して、静的URLへの変換にチャレンジしてみました。
多くの方が既に詳細な説明文を公開されているので、こここでは備忘録程度にしています。
.htaccessに下記のように記載すると、

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^param1-([a-z]+)$ index.php?param1=$1 [QSA,L]
RewriteRule ^param1-([a-z]+)/param2-([0-9]+)$ index.php?param1=$1&param2=$2 [QSA,L]

http://hogehoge.com/index.php?param1=foo&param2=bar
でアクセスしていたところを、
http://hogehoge.com/param1-foo/param2-bar
でアクセスができるようになります。
QSAフラグを付けると、
http://hogehoge.com/param1-foo/param2-bar&param3=boo
とアクセスした場合でも、正しく
http://hogehoge.com/index.php?param1=foo&param2=bar&param3=boo
と変換してくれます。

input conversion failed due to input error

お気に入りのYouTube動画を紹介しあうというコンセプトのSmile Cafeを運営しており、モデレータさんが運営するブログであるMy Video Cafeに、最新の動画エントリを5件表示しています。
その仕組みは、まずXOOPS側で投稿動画の最新エントリをRSSで配信し、そのRSSを受信してXML/Unserializerで解析・整形するツールを経由して、Movable TypeがJavaScriptでHTMLに埋め込むという感じです。
しかし、先日ブログ側に最新の投稿エントリが表示されないという現象が発生し、原因を調査していると、RSSを解析しているツールが

input conversion failed due to input error, bytes 0xAD 0xA1 0×3C 0×2F

というエラーを吐き出していました。結局、原因は文字コードEUC-JPで動作するXOOPSから配信されるRSS内にUTF-8には変換できない文字が含まれていたため、PEARのXML/Unserializer.phpが途中終了していたというもの。原因となった文字は、メールでもお馴染みの丸数字でした。
しょーがないので、ツール側でXML/Unserializerに渡す前に、

$data = mb_convert_encoding($data, "UTF-8", "EUC-JP");
$data = str_replace("EUC-JP", "UTF-8", $data);

文字コードを無理矢理UTF-8に変換し、charsetをUTF-8に置き換えました。これで途中終了はなくなり、めでたく(?)丸数字は「?」と表示されるようになりました。
本来ならば、正しいコードに変換してあげるべきかもしれないのですが、文字コードに詳しいわけでもない上、動画の投稿者が一般のユーザさんであるため、今後どのような文字で同じ現象が発生するかが予測できないので、このような対処をさせてもらいました。

Webページからテキストの抽出方法(PHP編)

mixiのとあるコミュニティでも発言したのですが、Webページからテキストだけを抜き出す方法です。

1:$content = mb_ereg_replace("\r|\n", "", $content);
2:$content = preg_replace("/(\015\012)|(\015)|(\012)/", "", $content);
3:$content = ereg_replace("/<!–.*\/\/–><!–.*\/\/–>/", "", $content);
4:$content = strip_tags($content);

1と2行目で改行コードを削除して、3でHTMLのコメントを削除して、最後にタグを削除します。もしCSSのスタイル文が含まれている場合には、 styleタグで囲まれたテキストも削除すればOKでしょう。