2012年11月09日

『CakePHP2実践入門』は、CakePHP1.xからのリハビリに最適!

雑事に追われて、原稿を公開済みにしないまましばらく時間が経過してしまいました・・・。
わざと各駅の電車に乗って、最後の文章校正をして、やっとこ公開します。

安藤さん、岸田さん、新原さん、市川さん、渡辺さん、鈴木さんの渾身の力作、「CakePHP2実践入門」で勉強しています。(安藤さん、書籍を送ってくださり、どうもありがとうございます!)PHPでの開発にはCakePHPフレームワークが当たり前のように使われるようになって、大規模事例もよく耳にするようになってから、かなりの期間がたちました。この本には、そうした歴史を作ってきた開発者たちのノウハウがいっぱいつまった一冊です。どのページにも大事なことが書いてあって、まるで6人の講師による講習コースを一週間受けているような気になりました。



私の現在の仕事では、ここしばらくPerlとLinuxが中心で(使わなきゃいけないサーバにPHPが入っていないんですよ。あとデーモン類も書いているので。)なかなかCakeに触れていないのですが、この本を読むたびにまた新たなプロジェクトを立ち上げたくなります。

また、現在は Ruby on RailsやPython Djangoなどのツール類も使っていますが、PHPではとんとお目にかからない、"500 Internal Server Error"が出るたびに、サーバの中でエラーってなんだよ、なにが起こったのかすぐに教えてくれー、という気持ちになります。そういう点ではPHPってホントにいいですね!PHPでない仕事にかかわると、PHPの良さも見えてきます。

CakePHP1.Xの経験者がリハビリするための、特におすすめの章:
第3章  CakePHPを試してみよう
第12章 ユニットテスト
第17章 CakePHP1系からの移行
などでしょうか。非常に参考になる経験者ならではのノウハウがつまっています。

あと、この本のもう一つの特徴は、「Web上にある入門チュートリアルやマニュアルと情報がかぶっていない」ということです。Webで検索できるようなことはそちらで調べたら良い、という方針のもと(そうかな?)、よくみんながつまづく点、それ詳しく解説して欲しかったーと思う点などが重点的にまとめられています。

CakePHPをおいしく食べたいそこのあなた、『CakePHP2実践入門』はおすすめですよ!
posted by SDozono at 12:22| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2012年07月06日

CakePHP 3.0!

いやー久しぶりだなー。
このブログももうそろそろ化石化しつつありますが、なかなか感慨深い記事があったので、思わず書いてしまいました。このブログを見ている方なんてもういないかもしれませんが。

http://bakery.cakephp.org/articles/lorenzo/2012/07/06/3_0_a_peek_into_cakephps_future
3.0: a peek into CakePHP's future

ずいぶんと昔、CakePHP 2について議論されている間に、CakePHPの“当時の”リードデベロッパーがCakePHP3の構想を練っていた時期がありました。そちらは、Cakeから抜けて、Lithiumとして開発が勧められていま(す。
https://github.com/UnionOfRAD/lithium

で、今回、CakePHPのほうのバージョンがあがってきて、いよいよ「本家」での3.0をどうするのか構想が上がってきたと。CakePHP 3.0は、PHP 5.4以上に特化した、とんがったフレームワークにしたいと考えているようですね・・・。
posted by SDozono at 15:09| 東京 ☔| Comment(1) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2012年04月10日

UTF-8以外のエンコーディングの際のチェックポイント

1年ぶりの投稿だー。
いつの間にか時間が過ぎていました。

で、今はたいていUTF-8で統一してサイトを作るのですが、今回、昔のシステムの中にCakeアプリをさっと入れようと思ったのですが、思わぬところではまったので書いておきます。

・MySQL 4.0で、テーブルが EUC-JP(ujis)
・なので、database.php の中で、エンコーディングを ujis に設定した。
・CakePHP 1.3.14 で現在の最新版
・/app/views/layouts/default.ctpの中で、charset=euc-jpも設定した。

なのに、
【問題】edit.php で日本語が消えてしまう!
という現象が発生しました。英語だときちんと表示、編集できます。なんだこりゃ。
最新版で入った問題点かな、とか疑ってしまいました。

viewの中の $this->Form->inputから順番にたどっていったところ、内部で h()をかけていました。そして、
結局のところ、 core.php の中の App.encoding の値を見て、 htmlspecialchars() を実行していることが分かりました。あった、あったよ〜(涙

というわけで、"UTF-8以外のcharsetを使ってCakePHPを使う場合"には、

・MySQLなら、テーブルのエンコードを確認
・database.php の中の encoding の値を確認
・/views/layouts/default.ctp の中の charset の値を確認
・core.php の中の、App.encoding の値を確認

という4点セットが必要です。今の時代に UTF-8じゃないコーディングで使っている人がどれぐらいいるか分かりませんが、備忘録として書いておきます。

ふぅ・・・。
posted by SDozono at 16:38| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2011年04月22日

CodeIgniterがんばる!

今年2011年はPHPフレームワーク的にみると大きな転換点?かもしれません。
全地域で見ると、Code IgniterがCakePHPを超えて検索量トップに出てきているようです。
軽く高速なフレームワーク、というコンセプトがPHPとうまくかみ合っているのかもしれません。

ScreenClip.png

posted by SDozono at 10:46| 東京 ☁| Comment(1) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

2011年03月25日

i18n国際化表示がうまくいかない?(Locale/mo file??)

とりあえず現状報告です。

--------------
PHP 5.2.5
Zend Optimizer
CakePHP 1.3.8
--------------

現在、Cakeのlocakeディレクトリ内に jpnディレクトリを作成し、POEditで作成した poファイルとmoファイルを入れてあります。と、なぜかあるサーバに限って日本語表示がうまくいかず、英語になってしまいました。

・service httpd restart などとすると、一瞬日本語が表示される。
・他のサーバではまったく問題が発生していない
・別ディレクトリに同じソースをコピーしても、そちらでもうまく表示されない
・cacheなどの設定はすべて試したがそれでは解消されなかった。
・Zend Optimizerを入れていたのでそれも疑っていた。

結局、「default.moファイルのファイル名を変更して、default.poだけを使用するようにしたところ、正しく日本語表示されるようになった」という結果になりました。

まだソースを追っていないので詳細は不明です。
あと、/tmp/cache/persistent 内にできているファイルサイズがやたらと巨大になり、中を見てみると、同じデータがなども繰り返して入っているようでした。

みなさんは経験ありますか〜〜?
ちなみに、POEditが悪いのかと思い、msgfmtで.moファイルを作り直してもみたのですが、やはり同じ内容に・・・・。

まだよく分かりません。

posted by SDozono at 17:33| 東京 ☀| Comment(0) | TrackBack(0) | Japanese Translation | このブログの読者になる | 更新情報をチェックする

2011年03月08日

DEBUG=0なのにDESCRIBEが頻発する

うひゃ〜久しぶりの更新だ。

今回、依頼されて調査したのは、「DEBUG=0に設定しているのに毎回DESCRIBEが発行されており、パフォーマンスに影響している」というものでした。

そんなこと起こるのかなぁと思ったら本当に発生していました。
まず最初に調べたのは、内部のコードで、DEBUGの値を変えていないか、というチェック。
Grepで一気に調べましたが、ありませんでした。

うーん、なんでだろう、と/app/tmp/cache/models を調べたところ、ファイルが生成されていないことが判明。
CakePHPは、テーブル構造の情報を DEBUG>0にしていると毎回チェックしますが、DEBUG=0にすると、「テーブル情報を/app/tmp/cache/models/内に書き込み、そのキャッシュを利用して速度を上げる」仕組みになっています。

つまり、キャッシュが生成されていないので毎回DESCRIBEが発行されていると判明。

ファイル権限をいろいろ調べましたが、そもそも/app/tmp/logs内のファイルなどは出力されています。
さらに調べたところ、core.php内の、

//Configure::write('Cache.disable', true);

がアンコメントされていることに気が付きました。
標準通りコメントアウトしたところ、無事に動作が戻りました。
posted by SDozono at 16:25| 東京 ☁| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2011年01月13日

CakePHPのワンクリックアップデート用ソースコード

「ワンクリックで自動アップデートさせるような機能を実現するCakePHPのソースコードだれか知らない?」とtwitterでつぶやいたら、即座にスイスから答えが返ってきました。

http://twitter.com/#!/dhofstet/status/25072465570963456

Googleで検索するだけの時代でないことをひしひしと感じます。
自分で検索してたらずいぶんと時間がかかっていたと思います。

というわけでこちら。鬼才mcurryのアプリケーション内にそのコードがありました。

https://github.com/mcurry/20Couch/blob/master/app/controllers/update_controller.php

まず、下記で最新バージョン番号を取ってきます。

//get the current version
App::import('Core', 'HttpSocket');
$Http = new HttpSocket();
$latestVersion = trim($Http->get(Configure::read('20Couch.home') . '/latest'));


下記で取得後、ファイルが正しくダウンロードできたか確認しています。

$Http = new HttpSocket();
$Setting = ClassRegistry::init('Setting');
$url = sprintf('%s/registrations/direct/%s/' . Configure::read('Update.file'), $home, $Setting->find('value', 'registration_key'));
$latest = $Http->get($url);


展開処理

$msg = '(using ZipArchive)';
$zip = new ZipArchive;
$zip->open(TMP . Configure::read('Update.file'));
$result = $zip->extractTo(ROOT);




posted by SDozono at 09:26| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP | このブログの読者になる | 更新情報をチェックする

2010年08月26日

DEBUG=0でも、DB接続エラーを表示

DEBUG設定を0にしていても、MySQLが動作していなければエラーを表示させるには。

app_controller.php に下記のように書いてみました。

(1)まず、下記を class宣言"class AppController extends...."の前に追加。
 
uses('model'.DS.'connection_manager');


(2)それから、
 
function __construct() {
parent::__construct();

$db =& ConnectionManager::getDataSource('default');
if(empty($db->connection)){
echo "Database Connection Error! Check your DB.";
exit;
}
}


これでOK。
posted by SDozono at 17:01| 東京 ☀| Comment(2) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする

2010年07月27日

LithiumとCakePHP

下記のブログ、なかなか面白いです。
要注目。

shift8
http://shift8creative.com/blog

もうLithiumの勢いがどうにもとまらない?という感じで、CakePHPがスタンダードとなった今、次の技術がはじまっている予感が。

どなたがはじめたかわかりませんが、
http://www.j-lithium.net/
も頑張って最新情報を追いかけ続けてほしいです。

cakephp.jpのフォーラムニュースも更新しないと・・・。
数年続けたので、今後もまぁがんばりましょう。
興味のわく方は、自由に見つけた記事を投稿してください。
posted by SDozono at 01:23| 東京 ☔| Comment(2) | TrackBack(0) | PHP Framework | このブログの読者になる | 更新情報をチェックする

2010年06月18日

Error at PHP 5.1.6

CakePHPのソースで、「PHP 5.2以上だとOKなのに、PHP5.1.6だと画面が真っ白になる」という現象を追ったところ、原因が判明したのでメモ。

現在、CentOS 5のyumで単純にPHPを入れると、5.1.6になりますので、今でも結構、使われているのではないでしょうか。

今回、問題になったコードは、

$conditions['AND'] = $conditions;

でした。

PHP 5.2以降では問題なく(?)動作していたようです。

開発環境や、開発テスト機はPHP5.2以降だったので気が付かなかったのですが、実際の運用環境がPHP5.1(というかCentOSそのまま)だったので、画面が真っ白になる現象が起きました。

$tmp = $conditions;
$conditions = array();
$conditions['AND'] = $tmp;

などとしたら、PHP5.1でも問題なく動作しました。

人のコードを読むと、自分では書かないようなものに出会いますね・・・。
posted by SDozono at 01:32| 東京 ☀| Comment(0) | TrackBack(0) | CakePHP General | このブログの読者になる | 更新情報をチェックする