Home > アーカイブ > 2006-09
2006-09
CakePHP1.1.8.3544リリース
CakePHP1.1.8.3544がリリースされています。1.1系では最後のリリースになるようです。1.2系は来年みたいですね。
CakePHP 1.1.8.3544 is the latest release and brings us to the point of some more exciting new changes.
While this release signals the end of the 1.1 series, it also provides the starting point for the next year.CakeForge: CakePHP: File Release Notes and Changelog (2006-09-22)
数多くの修正が行われており、先日のvendors.phpに関する修正も取り込まれているのでアップデートした方が良いでしょう。
ダウンロード:http://cakeforge.org/frs/?group_id=23&release_id=134
# ダウンロードファイル選択後に寄付を呼びかけるページが表示されます。
# 寄付しない場合は「No Thanks」を選択すればダウンロードページへ進めます。
- コメント (Close): 0
- トラックバック: 0
猫はバイク好き?
- 2006-09-22 (金)
- 雑記
朝晩はだいぶ涼しくなりバイクの季節になってきました。バイク通勤が快適な今日この頃です。
さてこないだ夜帰ろうとするとバイクのシートに何やら物体が居座っています。うん?と思い近づくと猫でした。このバイクを選ぶとはお目が高い!:-)
野良猫だと思うのですが人慣れしてるのか写真を撮ってもおとなしいもんでした。こう見ると猫もかわいいもんですね。
- コメント (Close): 0
- トラックバック: 0
PHP_CodeSnifferを試してみる
- 2006-09-21 (木)
- PHP
PHP_CodeSnifferはPHPのコードスタイルをチェックするツールです。0.1.0ではPEARのコーディング基準に適合するかどうかを確認できますので、いくつか試してみました。
まずは簡単にPHP_CodeSnifferの使い方から。
PHP_CodeSnifferを使う
インストール
pearコマンドでインストールするだけです。
$ pear install PHP_CodeSniffer-0.1.0
CLI環境ではPEARパッケージに含まれているphpcsコマンドでチェックができます。
使用例
まずありがちなサンプルファイルでチェックしてみます。チェックするソースは以下です。
< ?php class Hello { var $message = null; function __construct($message) { $this->message = $message; } function hello() { echo("Hello! PHP"); echo($this->message); } } $obj = new Hello("Cake is sweet."); $obj->hello(); ?>
phpcsでチェックします。
$ phpcs -v hello.php Registering sniffs... DONE Processing hello.php [93 tokens in 17 lines]... DONE in < 1 second FILE: hello.php -------------------------------------------------------------------------------- FOUND 8 ERROR(S) AND 0 WARNING(S) AFFECTING 6 LINE(S) -------------------------------------------------------------------------------- [LINE 3] ERROR: Line indented incorrectly. Expected at least 4 spaces, but found 2. [LINE 5] ERROR: Opening function brace should be on a new line. [LINE 5] ERROR: Line indented incorrectly. Expected 4 spaces but found 2. [LINE 6] ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4. [LINE 9] ERROR: Opening function brace should be on a new line. [LINE 9] ERROR: Line indented incorrectly. Expected 4 spaces but found 2. [LINE 10] ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4. [LINE 11] ERROR: Line indented incorrectly. Expected at least 8 spaces, but found 4. -------------------------------------------------------------------------------- [/code] <p>いろいろ出てきましたが、ほとんどがインデントに関するものです。(PEARではインデントは4スペースが推奨です。)あとメソッド定義で[{]を続けて書くのがまずいようです。ソースを修正して再度チェックします。 $ phpcs -v hello1.php Registering sniffs... DONE Processing hello1.php [95 tokens in 19 lines]... DONE in < 1 second [/code] <p>無事エラーはなくなりました。 <h2>PEARをチェック</h2> <p>PEAR.phpで試してみました。これは適合して当たり前でしょう。</p> $ phpcs -v --report=summary PEAR.php Registering sniffs... DONE Processing PEAR.php [5550 tokens in 1101 lines]... DONE in 2 seconds PHP CODE SNIFFER REPORT SUMMARY -------------------------------------------------------------------------------- FILE ERRORS WARNINGS -------------------------------------------------------------------------------- PEAR.php 117 30 -------------------------------------------------------------------------------- A TOTAL OF 117 ERROR(S) AND 30 WARNING(S) WERE FOUND IN 1 FILE(S) --------------------------------------------------------------------------------
出まくってますね。。。エラー内容を見るとさすがにインデント関係は出ていないですが、カンマや条件文でエラーが出ています。あと改行がCR+LFになってますね。これは良いのかな?
PHP_CodeSnifferをチェック
つぎはPHP_CodeSniffer自身です。PHP/CodeSnifferディレクトリ以下をチェックしました。
$ phpcs -v --reort=summary PHP/CodeSniffer Registering sniffs... DONE (snip) PHP CODE SNIFFER REPORT SUMMARY -------------------------------------------------------------------------------- FILE ERRORS WARNINGS -------------------------------------------------------------------------------- PHP/CodeSnifferCommentParserAbstractDocElement.php 0 8 PHP/CodeSnifferCommentParserAbstractParser.php 0 13 PHP/CodeSnifferCommentParserClassCommentParser.php 0 7 PHP/CodeSnifferCommentParserCommentElement.php 0 7 PHP/CodeSnifferCommentParserDocElement.php 0 0 PHP/CodeSnifferCommentParserFunctionCommentParser.php 0 4 PHP/CodeSnifferCommentParserMemberCommentParser.php 0 2 PHP/CodeSnifferCommentParserPairElement.php 0 4 PHP/CodeSnifferCommentParserParameterElement.php 0 6 PHP/CodeSnifferCommentParserParserException.php 0 0 PHP/CodeSnifferCommentParserSingleElement.php 0 4 PHP/CodeSnifferException.php 0 0 PHP/CodeSnifferFile.php 0 62 PHP/CodeSnifferSniff.php 0 4 PHP/CodeSnifferSniffException.php 0 0 PHP/CodeSnifferStandardsAbstractPatternSniff.php 0 33 PHP/CodeSnifferStandardsAbstractScopeSniff.php 0 15 PHP/CodeSnifferStandardsAbstractVariableSniff.php 0 14 PHP/CodeSnifferStandardsIncorrectPatternException.php 0 0 ...ferStandardsPEARSniffsCommentingInlineCommentSniff.php 0 1 ...StandardsPEARSniffsConstantsValidConstantNameSniff.php 0 11 ...rdsPEARSniffsControlStructuresControlSignatureSniff.php 0 1 ...eSnifferStandardsPEARSniffsFilesIncludingFileSniff.php 0 8 ...CodeSnifferStandardsPEARSniffsFilesLineLengthSniff.php 0 3 ...tandardsPEARSniffsMethodsFunctionCallSignatureSniff.php 0 9 ...ardsPEARSniffsMethodsMethodCallArgumentSpacingSniff.php 0 11 ...rStandardsPEARSniffsMethodsOpeningMethodBraceSniff.php 0 5 ...erStandardsPEARSniffsMethodsValidDefaultValueSniff.php 0 3 ...odeSnifferStandardsPEARSniffsMiscShortOpenTagSniff.php 0 5 ...dardsPEARSniffsNamingConventionsValidClassNameSniff.php 0 4 ...dsPEARSniffsNamingConventionsValidFunctionNameSniff.php 0 19 ...nifferStandardsPEARSniffsPHPLowerCaseConstantSniff.php 0 2 ...StandardsPEARSniffsStatementsMultipleStatementSniff.php 0 21 ...StandardsPEARSniffsWhiteSpaceScopeClosingBraceSniff.php 0 5 ...ifferStandardsPEARSniffsWhiteSpaceScopeIndentSniff.php 0 13 PHP/CodeSnifferTokens.php 0 0 -------------------------------------------------------------------------------- A TOTAL OF 0 ERROR(S) AND 304 WARNING(S) WERE FOUND IN 36 FILE(S) --------------------------------------------------------------------------------
WARNINGは出ていますが、ERRORは無いです。さすがです。
CakePHPをチェック
おまけでCakePHPです。CakePHPのソースは荒っぽいところが残っているので興味津々です。(エラーが多く出そうで:-P)[cake/dispatcher.php]をチェックしてみました。
$ phpcs -v --report=summary cake/dispatcher.php Registering sniffs... DONE Processing dispatcher.php [3450 tokens in 430 lines]... DONE in 1 second PHP CODE SNIFFER REPORT SUMMARY -------------------------------------------------------------------------------- FILE ERRORS WARNINGS -------------------------------------------------------------------------------- cakedispatcher.php 301 26 -------------------------------------------------------------------------------- A TOTAL OF 301 ERROR(S) AND 26 WARNING(S) WERE FOUND IN 1 FILE(S) --------------------------------------------------------------------------------
301 ERROR(S)!!と期待(?)を裏切らない結果になったのですが、エラー内容を見るとほとんどはインデントのエラーでした。なのでそれを除外するとエラーは26個になりました。[エラー内容(除くインデントエラー)]
エラーはif文、foreach文のスペース、メソッド宣言でのブレース位置くらいですね。まあCakePHPはPEARコーディング規約で書かれているわけではないですけど、わりと適合していたのは意外でした。
PEAR標準ソースを書く
こうしていくつかのソースを見てみるとおおよそひっかかりそうな箇所が見えてきます。PEARコーティング規約に適合するソースを書くにあたってとりあえず気をつけておく点を並べてみました。
- インデントは4スペース
- メソッド定義にてブレース[{]は次の行に書く
- if,foreachなので制御構造ではキーワードと[(]の間にスペースを入れる
- 改行はLF?
- 一行85桁まで。
- 変数の代入式を並べる時は値が縦に並ぶようにスペースを入れる。
cvsやsvnにコミットする時に自動的にチェックするとかunitテストに盛り込むなどアイデア次第で面白い事ができそうです。
- コメント (Close): 0
- トラックバック: 0
PHPで$a{N}表現
- 2006-09-21 (木)
- PHP
PHP_CodeSnifferのソースを見てたときに気づいたのですが、PHPで$a{N}という表現ができることを初めて知りました。
< ?php $a = "abc"; echo $a{0} . "\n"; echo $a{1} . "\n"; echo $a{2} . "\n"; ?>
$ php -f test.php a b c
substr($a, N, 1)と同じですね。(マニュアル見たら載ってました。。。)
ちなみに日本語はばっちり化けます。
< ?php $a = "あいう"; echo $a{0} . "\n"; echo $a{1} . "\n"; echo $a{2} . "\n"; ?>
$ php -f test.php 、 「 、
- コメント (Close): 0
- トラックバック: 0
PHP開発に便利な早見表集
- 2006-09-20 (水)
- PHP
※PostgreSQLとFirebird2の早見表を追加しました。(2006/11/07)
※Prototypeの早見表を追加しました。(2007/01/12)
PHP開発に役立つ早見表(cheat sheet)をまとめてみました。
PHP全般
-
PHP Cheat Sheet
スーパーグローバル変数、日付・時間フォーマット、正規表現、PCRE、関数定義、fopenモード - Filtering & Escaping Cheat Sheet
入出力値のフィルタリング・エスケープ処理。(POPなデザインで楽しいです) -
PCRE Cheat Sheet
PCRE(Perl Compatible Regular Expressions-preg*系で使う正規表現) - Regular Expressions Cheat Sheet
正規表現
データベース
-
MySQL Cheat Sheet
MySQL-関数、データ型、PHP関数、サンプルSQL -
PostgreSQL Cheat Sheet
PostgreSQL-関数、データ型、便利なSQL、インフォメーションスキーマ -
Firebird2 Cheat Sheet
MySQL-関数、データ型、PHP関数、便利なSQL
その他
-
symfony Admin Generator cheat sheet
symfony-admin generator - CakePHP cheatsheet
CakePHP-フレームワーク概要 - Smarty cheat sheet for template designers
Smarty-テンプレート - http://refcards.com/refcards/apache/index.html
Apache-httpdコマンド、各ディレクティブ - mod_rewrite Cheat Sheet
Apahce-mod_rewrite - CSS Cheat Sheet
CSS-プロパティリスト、書式、セレクタ、疑似セレクタ、メディアタイプ、ボックスモデル、単位、継承 - JavaScript Cheat Sheet
JavaScript-関数・メソッド、XMLHttpRequest、HTMLへの記述、正規表現、イベントハンドラ -
Prototype 1.5.0 Cheat Sheet – Snook.ca
Prototype
どれもPDFで提供されていますので、印刷してクリアファイルにでも入れておけば便利かもしれませんね。
# mod_rewriteは設定の度にgoogleで調べているので、手元にあると役立ちそうです。
- コメント (Close): 0
- トラックバック: 0
CakePHP controller共通のモデル、コンポーネント、ヘルパーを設定する
controller共通のモデル、コンポーネント、ヘルパーを設定する方法です。
We all know the problem, there are always Models, Components or Helpers that we need for about 99% of all our actions/views and therefor would fit beautifully in our AppController. The only problem is, as soon as we define them via “var $uses = array(‘…’);” (etc.), we cannot easily add more items in our derived controllers without having to repeat the entire list.
ThinkingPHP and beyond » Dessert #10 – Default Models, Components & Helpers (2006-09-19)
これ私も気になっていた箇所なので、そうそう、といった感じでした。エントリではAppControllerのコンストラクタで$uses,$components,$helpersをマージする方法が紹介されています。
こういう方法もあるかなーと見ていると、上記エントリのコメントでさっくりと突っ込まれました。実はこれControllerクラスのコンストラクタでマージしてくれるようになっているんですね。以下のソースでAppControllerで設定したコンポーネントがTestControllerで使えます。すっきり、すっきり。
[app/app_controller.php]
< ?php class AppController extends Controller { var $components = array('RequestHandler'); } ?>
[app/controllers/test_controller.php]
< ?php class TestController extends AppController { var $name = "Test"; var $components = array('Session'); function index() { // RequestHandlerもSessionも使える if ($this->RequestHandler->isGet()) { $this->Session->destroy(); } } } ?>
- コメント (Close): 0
- トラックバック: 1
CakePHP vendors.phpにセキュリティホール
cakebakerやCakePHP Users in JapanにもあるようにCakePHPにて任意のファイルが読み込めるセキュリティホールが見つかっています。
問題となるファイルは[app/webroot/js/vendors.php]です。このファイルはvendors/javascript/以下にあるjsファイルを読み込むものなのですが、is_file()やreadfile()がバイナリセーフではないため%00をファイル名に挿入することにより任意のファイルを読めてしまいます。
対応策は以下になります。
- 修正済みファイルを適用する。
- 使用していないならvendors.phpを削除してしまう。
そもそも[app/vendors/javascript]が無い場合はvedors.phpは使用していないはずのですので。(デフォルトでは[app/vendors/javascript])はありません。 - magic_quotes_gpcをOnにする。
文字化けの問題があるので日本語圏ではこれは無いでしょうね。
ただ現時点ではbake.phpで使用するテンプレートが修正されてないため、bake.phpで新規プロジェクトを作るとまた同じ問題が発生してしまいます。その場合は再度対策が必要となるためご注意を。
追記:
bake用テンプレートも修正されました。(Thanks dho!)
あとちょっと気になるのはjsファイルかどうか正規表現の部分です。
if(is_file('../../vendors/javascript/'.$file) && (preg_match('/(\/.+)\\.js/', $file)))
ここは後方一致になるように’/(\/.+)\\.js$/’にしておいた方が良いかと。あとこれは純粋に疑問なのですが\/はなぜ必要なのでしょうか。
まあこのファイル自体使いどころが良く分からなかったりするのですが。:P
- コメント (Close): 0
- トラックバック: 0
CakePHP 環境に応じてDBの設定を変える
本番環境や開発環境など環境に応じてDBの設定を変える方法です。
1.AppModelを書き換える
withcakeで紹介されている方法です。
AppModelのコンストラクタで切り替えるアイデアは分かりやすくて良いと思います。ちなみに記事のコメントにもあったのですが、記事のコードだとコンストラクタの引数がModelへ渡されませんので、修正版を以下に書いておきます。
[app/app_model.php]
class AppModel extends Model { function __construct($id = false, $table = null, $ds = null) { $this->useDbConfig = $_SERVER['HTTP_HOST'] == 'devserver'?'test':'default'; parent::__construct($id, $table, $ds); } }
2.database.phpを書き換える
NoswaDで紹介されている方法です。
cakebakerでも書かれていますが、database.phpは設定ファイルなので、これにコードを入れるのは若干抵抗を感じます。(まあdatabase.phpがなぜクラスになっているのか?という考えもありますが。)
3.Subversionで切り替える
cakebakerで紹介されている方法です。
I try to avoid to add code to configuration files because those files shouldn’t contain any logic. Instead I use Subversion to manage different configurations. In my repository I have at least two folders for each project: a “trunk” folder where the development happens, and a “live” folder which contains the code (and configurations) for the live application. So if I put something online I just export the content of the “live” folder from the repository, and with it the “live” configuration.
cakebaker » An alternative to “hacking” config files (2006-09-17)
「Subversion使えよ。なんでハックなんかやってるの?」と言ったところでしょうか。:)詳しい実践方法の記述が無いので的外れの可能性大ですが、これだとtrunk/とlive/でコードが別々になるような気がするのですが、どうなんでしょうか。
4.環境変数で切り替える
1.の変形版です。開発環境ではIPが変わる事があるので、環境変数で切り替える方法を考えてみました。これなら実行環境のIPがどうなろうと影響を受けません。
[httpd.conf]
SetEnv CAKE_DB_CONFIG test
[app/app_model.php]
< ?php class AppModel extends Model { function __construct($id = false, $table = null, $ds = null) { $this->useDbConfig = empty($_SERVER['CAKE_DB_CONFIG']) ? 'default' : $_SERVER['CAKE_DB_CONFIG']; parent::__construct($id, $table, $ds); } } ?>
httpd.confで環境変数CAKE_DB_CONFIGを定義しておけば、その値をuseDbConfigに使用し、定義がなければ’default’を使用します。使い方としては本番環境が’default’で、開発環境等の他の環境は’dev’等を定義する形を考えています。
- コメント (Close): 0
- トラックバック: 5
正規表現 早見表
- 2006-09-17 (日)
- PHP
A4サイズの正規表現の早見表です。
The Regular Expressions cheat sheet is designed to be printed on an A4 sheet of paper and live by a designer or developer’s desk, to make life a bit easier. A description of what is on the cheat sheet follows, or if you are impatient, you can go straight to the full size Regular Expressions cheat sheet.
Regular Expressions Cheat Sheet – Cheat Sheets – ILoveJackDaniels.com (2006-09-17)
英語ですが基本的な構文がすっきりまとまっています。一枚印刷しておけば重宝しそうですね。
- コメント (Close): 0
- トラックバック: 0
Themeを変えました
- 2006-09-17 (日)
- 雑記
文章やソースが見辛かったのでThemeを変えました。すっきりして読みやすくなったと思います。
色々なThemeを探し回ったのですが、良いデザインが多く配布されていてほんと凄いですね。ありがたいことです、はい。
- コメント (Close): 0
- トラックバック: 0
Home > アーカイブ > 2006-09
- 検索
- フィード
- メタ情報