Latest Publications

Timehelperをcontrollerで

cakePHPのTimeHelperにはdaysAsSqlというものがあり、指定した日付範囲をSQLの条件文形式にしてくれるものらしい。

SQLでどうこうはControllerでやるものなんじゃないかと思うけど、なぜかViewでしか使えないとか。Viewで使うことがあるんだろうか。まぁControllerでもわざわざ使う必要はないけど、使えないこともないみたいなのでメモ

1
2
3
4
5
if(loadHelper('Time'))
{
    $Time = new TimeHelper();
}
$cond = $Time->daysAsSql("2007/11/12","2007/11/18","date");

cakePHPを学習中

PHPフレームワークのcakePHPを学習中。ウェブの情報から色々学んでいたけどなかなか進まず焦ってた。そんな中、書籍が発売されたとのことで早速購入。これで一気に進んでるので楽しい。

CakePHPガイドブック

CakePHPガイドブック

安藤 祐介(著) 新原 雅司(著) 堂園 俊郎(著) 
2007-10-25
毎日コミュニケーションズ
ASIN:4839924317


この本非常に良い。説明と共にチュートリアルみたいになってるのでやっていくうちになんとなくわかる。セキュリティに関しての説明もあるので安心。

cakePHPはバージョンが主に2個あり、最新の1.2系と安定版の1.1系。最初はどうせなら今後使うことになる1.2系をと思ってやってたけど世のドキュメントのほとんどが1.1系を基準に書いてあるので、その通りにやると度々エラーが発生して時間を取られる。購入した本も1.1系で書いてあるのでもういっそのこと1.1で学習し、cakePHPそのものに慣れたあとで1.2系を学ぶことにした。

gooブログのトラックバックはやっかい

各種ブログのトラックバックは当然ながら同一規格でデータ送信しているもの。だからこそトラックバックの受信側がシステムを作れる。それを前提にしてシステムにトラックバックを受信できる仕組みを作っていた。

最近それを使ってもらったのだけど、gooブログを使っている人たちから上手くできないようだとの連絡あり。しらべてみると、確かに上手くできていないみたい。

トラックバックは通常$_POSTでデータを受け取るのだけれど中身を確認したらカラだった。なぜこんなことが?と色々やってみたら結局$_GETでデータの取得に成功。なんじゃそら。

トラックバックの正しいデータ送信方法ってのは知らないからこれでも間違いないのかもしれないけど、gooブログを使っている人はウチのシステムだけじゃなく他のブログにトラックバックを送っても上手くできないこともよくあると言っていたのでやはりスタンダードではないんじゃないかと。

とはいえ放置するわけにもいかないのできちんと対応。面倒だなぁ。大手のサービスなんだし他と足並みを揃えて欲しい。

phpBBを入れてみた

PHP+MySQL(PostgreSQL)を使った掲示板で海外では非常に人気が高いとか。日本使っているのをあまり聞かなかったけど使ってみると「あー、あのサイトのフォーラムはこれを使ってたんだ」などと思い当たるところがいくつか。

江島BBS

登録制のBBSで、管理者がフォーラムを作ってそこに参加者が書き込んでいくみたい。ユーザーごとにグループを作り閲覧権限などを管理できるため、ひとつのシステムで複数のグループのコミュニケーションを管理したりもできそう。短期のプロジェクトなど行う場合でも便利かも。

インストールは超簡単。ワードプレス並。データベースの設定もブラウザからできるので、DLしたファイルをアップした後画面の指示に従ってデータを入力するだけ。ただ唯一困ったのが、標準の日本語化されたシステムがshift-jisで出来ていること。サーバーをUTF-8仕様にしているので何かないかと探したらUTF-8にしたものを公開されている方もいたのでそちらをアップすればできた。ありがたい。

UTF-8対応ファイル(phpBB2 JP Support Forum)

PHPBB.HELP J(インストールと使い方の説明サイト)

色んな機能を追加したりデザインを変更したりもできるみたいだけど現時点ではとりあえずノーマルのまま。しばらく使ってみて面白そうならちょっとずつ改造していくかも。

ユーザー登録が誰でもできてしまうのをなんとかできないかと検討中。デザインがごちゃごちゃしているのもちょっと気に入らないのでいらんのを削りたい。

他にもフォーラムの機能を色々使ってみたいので、お知り合いの方よかったら登録して使ってみて下さい。

tracをお試し中

プロジェクト管理にtracというツールが便利と聞いてお試し中。Webサーバーに置いてどこからでアクセスでき、複数人で使うものらしいけどとりあえず自分のトコでどんなもんか使ってみることに。

Windowsに入れるのにはtrac月(trackLight)という色々便利なものがまとまっているツールがあるらしいのでそれをDLしてインストールしてみた。

しかし動かない。どうやら元から入っているxamppと競合しているらしい。Apacheの設定を上書きすると表示が出て一応バックアップしてたけど、別のトコにインストールされた模様。そりゃそうか。

困ったと思って調べると解決方法を発見。
Trac月とXAMPPとXSASを同時に使う。

C:\TracLight\apache2\conf\httpd.confのポート指定を変えれば動くとの事。これを変えて、スターとメニューからtracのコマンドプロンプトから実行を選択して起動させ、ブラウザからチェック。ようやく動いた。

しばらくつっついては見たけどやはりある程度の規模のプロジェクト用に作られているみたい。チケットでタスクなどを管理するというのを魅力に感じていたけどもうちょっとシンプルなつくりにして欲しい。フォーラムも。この辺カスタマイズできるのかな。とりあえず使ってみよう。

cakePHPチュートリアルでつまづき1

cakePHPを学ぶためにブログのようなものを作るチュートリアルを実行中。そのまんまやってるのになぜかエラーになる。エラーを調べてみると、deprecated in htmlhelperと出る。辞書で調べてみると「廃止予定の」って。なぜだー。cakePHPの1.2を使っているせいだろうか。

調べてみると、posts_controller.phpに

1
    var $helpers = array('Html', 'Form');

を追加。

そしてadd.thmlに書いてあった$htmlを$formに変えたら動いた。なんか他にもエラーが出てたけど気にしない事に。

Eclipse導入

PHPでシステム開発をしているがEclipseがいいと聞いて早速導入してみた。本来はJavaの開発用の環境らしいが他言語用にも使えるようなツールが準備されていてPHP用も何種類か出ている。よくあるコードの色付け機能はもちろん、構文を保存の旅に自動チェックしてくれたり保存履歴が記録されて数日前に保存した状態も呼び出せたりとかなり高機能な様子。

導入までのあれこれをメモ。なお、環境はWindowsXPで既に使っているものとしてXAMPP,Subversion,TortoiseSVNがあること前提。また、今後cakePHPを使ってみようと思っているためそれも加味して環境を作った。

まずPHP用のEclipseもいくつかあるようだけど、今回はPDT(PHP Development Tools)というものを選んだ。CakePHPの試食前に、EclipseでPHPの開発環境を整える という記事で非常に丁寧に説明されていたので参考にさせてもらいPDTの選択とインストールを行った。

PDT Project公式サイトのDownloadsページから(07/10/20時点で)最新のR20070917というところを開き、Windows用のなんやかんや一式が詰まったオールインパッケージpdt-all-in-one-1.0-R20070917-win32.zipをダウンロード。

ダウンロードしたものを解凍するとeclipseフォルダができるので適当な場所に移動。セットアップとかは必要ないみたい。eclipse本体+PHP用色々はこれで導入完了。すごい簡単。

次にデバッガを導入。デフォルトではZendDebuggerというものが入っているらしいけどcakePHPと相性が悪いということでXdebugというものを入れたら良いんだとか。新しめのXAMPPには最初から入っているとのことで、php.iniの編集だけで良いみたい。

xampp\php\php.iniとxampp\apache\bin\php.iniで下記を編集。[xdebug]は追加で、[Zend]の一行は元々あるものをコメントアウトする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[xdebug]
zend_extension_ts = "C:¥Program Files¥xampp¥php¥ext¥php_xdebug-2.0.0-5.2.2.dll"      ←環境に合わせてください
xdebug.remote_enable=1
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req
xdebug.remote_host="localhost"
xdebug.remote_port=9000
xdebug.remote_log="C:¥Program Files¥xampp¥apache¥logs¥xdebug.log"
xdebug.manual_url = http://jp2.php.net
xdebug.collect_params = On
xdebug.dump.GET = *
xdebug.dump.POST = *
[Zend]
;zend_extension_ts = “C:¥Program Files¥xampp¥php¥zend¥Optimizer¥lib¥ZendExtensionManager

Xdebugはこれで終わりかと思うんだけど、ちゃんと動いているのかまだよくわかってない。おかしかったら後々追記。

お次はEclipseの日本語化。Pleiadesというプラグインでできる。こちらのサイトからダウンロードできる。最新版の1.2.1.pというところをクリックしてpleiades_1.2.1.p12.zipをダウンロード。

解凍したフォルダのreadmeにインストールの方法が書いてあるのでその通りに実行。起動時-cleanを付けたショートカットというのは圧縮ファイルの中に入っているeclipse.exe -clean.cmdのことみたい。eclipse.exe本体と同じ場所に置けばこれをダブルクリックするだけで-cleanを付けた状態で起動できる。ちなみにこのパッケージにはJStyleという全角空白、半角空白、タブ、改行(LF、CRLF、CR)を表示可能にするプラグインも一緒に入っているので便利。

続いてはEclipseでsubversionを使えるようにするためのプラグイン。今までのようにファイルをダウンロードして特定の場所に入れるとかではなく、Eclipseを起動させてその機能としてインストールする。やり方はSubclipseのインストール方法というページが画像付で丁寧に書いてあるので非常に便利。

さて、インストールは簡単だったけどつなげるまですごく苦労した。外部サーバーとの接続に鍵ファイルを用いた接続を行っているのだがそれが上手くできない。調べてみるとputtyのツールを毎回起動させたりと書いてあるが、それも動かないしなんかそんなのしたくない。TortoiseSVNの設定をする時も非常に苦労したが同じような状態。決定的な情報は見つからなかったけど書いてある色んなのを組み合わせて試したらできた。TortoiseSVNのファイルを使う方法。

まずTortoiseSVNでの設定を見る。ネットワーク設定で、SSHクライアントとして下記を指定していた。

1
"D:¥Program Files¥TortoiseSVN¥bin¥TortoisePlink.exe" -ssh -l username -i "ppkのパス"

それを元に、Windowsのユーザー環境変数を設定。マイコンピューターのプロパティ→詳細設定→環境変数→ユーザー環境変数の新規で、変数名に「SVN_SSH」、変数値に

1
D:/Program Files/TortoiseSVN/bin/TortoisePlink.exe -ssh -l username -i ppkのパス

と入れる。ダブルクォーテーションを取ったのと、¥をスラッシュに変更。後はEclipseのPHPエクスプローラー上で右クリックし、新規→その他→SVN→SVNからプロジェクトをチェックアウトでTortoiseSVNと同じように設定すればチェックアウトできる。コミットもできた。

次に文字化け。UTF-8でコードを書いてるが表示したら文字化けしてた。これは設定→一般→コンテンツ・タイプでPHPコンテンツタイプを選び、デフォルト・エンコードをUTF-8に設定。ついでにHTMLも。

普段smartyを使っているので何かないかと探したらSmarty Editorとやらが便利とのこと。ダウンロードして、eclipse/pluginに入れて再起動。でもテンプレートファイルを開いてもPHPモードとして開くので、関連付けを変更。設定→一般→ファイルの関連付けでテンプレートファイル*.tplを追加し、下部の関連付けられたエディターでsmarty Editorを選び右のデフォルトボタンを押すと関連付け完了。どんなもんか見てみようと思ったらエラーが!Bad version number in .classs fileとか。新しいEclipseのバージョンに対応していないんだろうか?調べてみてもわからなかったので断念。

あとちょっと使ってみて、エラーチェックはありがたいが全部のファイルをチェックするのでうざい。「問題」の右にある「▽」からフィルターの構成を選び、「選択された要素のみ」に変更すると開いてるのだけチェックしてくれるようになった。

以上、とりあえずインストールして使えるように設定してみた。まだ使い込んでいないので使っていくうちにまた追加した方が良いものや使いやすい設定なども出てくると思うのでそしたら追記。

もしこのエントリを見つけた方でおすすめのプラグインや設定などあれば教えて下さい。

(追記:2007/11/9)
cakePHP1.1を使う際*.thtmlという拡張子を使うんだけどHTMLエディターを関連付けて文字コードをUTF-8にすると保存をUTF-8Nで行う。そして読み込みはUTF-8で行うので文字化けする。

解決法:設定→一般→コンテンツタイプ→PHPコンテンツ・タイプに*.thtmlを追加すると正しく表示。理由不明。

WordPressでコードをキレイに表示するプラグイン

PHPのコードをブログに書いて、キレイに出す方法はないかと探してみたらプラグインを発見。

WP_syntaxというもの。DLして wp-content/pluginsに保存。サーバーにアップして、WordPressの管理画面からプラグインを有効にする。

これだけで良いのかと思ったら色がつかないしコードが出てるだけ。スタイルシートをいじらなくちゃいけないみたい。README.txtに書いてあったcssを追加したら形が整ってきた。なぜかずれるので.wp_syntaxの左マージンを0pxから-2pxに変更してぴったりに。

コードは<pre lang=”PHP” line=”1″> で挟めばキレイに整って色が出る。これは便利だ。

日付の変換で困る

RSS1.0やRSS2.0に加えてAtomフィードを取得するためにMagpieRSSを導入した。勝手にタイムスタンプを吐き出してくれるという事で非常に便利。日付の型がまちまちなので、これで安心。と思ったのが間違いだった。

Atomではタイムスタンプを上手く出してくれない。しかも一部のRSS2.0でも。これでは困る。結局複数の日付に対応させることになってしまった。意味ない。

そして特に困ったのがAtomの日付。RFC3339という形式でよく見かける気はするんだけどPHP4でキレイに変換する方法が見つからない。しょうがないので汚いけどこんな感じで書いた。

1
2
3
4
5
$date_rfc3339 = $item['published'];
preg_match("/(d{4})(?:-(d{2})(?:-(d{2})(?:T(d{2}):(d{2})(?::(d{2})(?:.(d+))?)?(Z|([+-]d{2}):(d{2}))?)?)?)?/", $date_rfc3339, $date_array);
$date_timestamp = strtotime($date_array[1]."/".$date_array[2]."/".$date_array[3]." ".$date_array[4].":".$date_array[5].":".$date_array[6]);
if ($date_array[8] == "Z") $date_timestamp+=9*60*60;
$etr_date = date("Y/m/d H:i:s", $date_timestamp);

なんかあると思うんだけどなー。

HTTP_Client わからん

外部サイトのデータを取る時にHTTP_Requestでデータがあるかどうかチェックしていたが、サーバーの反応がない時に正常にタイムアウトにならないらしい。

困ったのでHTTP_Clientでできないものかと調べていたけど情報が少なすぎて断念。パラメーターとか全然どこに書いてあるかわからない。

しょうがないので後回し。サーバーの反応がないなんてことが起こらないことを祈る。