php

プラグイン機構の導入

Moony 0.16.xをフルスクラッチで開発してます。基本的な機能とか流れは変わらないのですが、新たにプラグイン機構を実装してみました。基本的な流れとしては: 使うプラグインを明示 実行予定のアクションクラスにプラグインのクラスをMix-in(ぽく) 新しくM…

MoonyをPHP5ベースにするか否か

Moonyどうしよう: PHP5ベースに移行? 実装とかすごく楽になるね Exceptionとか使いたいし __callとかのマジックメソッドも使いたい 今借りてるレンタルサーバがPHP4 orz 作っても使えないんじゃ仕方ない やっぱりPHP4ベースかなぁ… ← 今ココ

プラガブルに

実はフレームワークにとって一番重要なのは、プラグインでどこまで拡張できるかというところなのではないかという気がする。例えば: jQuery Ruby on Rails Catalyst Plagger symfony CakePHP みんなプラグイン機構を持っていて、それを利用してユーザがどん…

PHPカンファレンス2007行ってきた

php

既に昨日の話ですが。懇親会には出ずにすたこら帰りました…。ろくに挨拶もせずにゴメンナサイ。>皆様思ったこと: PiOは京急蒲田なので行きやすい 京成→都営浅草→京急で直通 まだ第一京浜の踏切は健在 PiOの4階に食堂があるのを初めて知った PHP6のUnicode化…

リクエストパラメータの抽象化

php

考えれば考えるほどPHPならリクエストパラメータは$_GET/$_POSTから取得すればいいような気がする。別に抽象化の必要なんてないような…。そういう使い方の方がPHPっぽいよね(よくも悪くも)。

適度に疎結合に

Moonyどうしよう、と最近ずっと悶々としているわけですが、とりあえずモジュール単位で個々に使えるような感じにしていこうかな、と思います。適度に疎結合に。そして多分、核になるのが以下のモジュール群: Moony_Renderer_* Moony_Request Moony_Router Mo…

フレームワーク?

フレームワークに依存した開発に疑問を持つ そもそも不自由 フルスタックってどうよ Zend Frameworkに目が行く フレームワークをパーツ化したもの Ruby on Railsとは発想が違う 案外いいんじゃないか… さて、Moonyどうしよう ← 今ココ

MoonyとPHP4/5

Moonyの開発を再始動するにあたって、気になるのはPHP4のサポート終了。でも借りてるレンタルサーバがPHP4しか現状で使えないので、PHP4を捨てるわけにもいかない。CakePHP方式でできるだけハイブリッドにしてがんばろうかな。

再始動

停滞気味のMoonyの開発ですが、再始動します。改めて実装目標: REST(っぽいURL)の実現が可能なルーティング機能 テンプレート機能 リクエストパラメータが手軽に扱えること セッションが手軽に扱えること validation機能が揃っていること セキュリティの考…

UTF-8のひらがな/カタカナの正規表現(PHP)

php

preg_matchで使える感じで: /^(\xe3(\x81[\x81-\xbf]|\x82[\x80-\x93]|\x83\xbc))*$/ (ひらがな) /^(\xe3(\x82[\xa1-\xbf]|\x83[\x80-\xb6]|\x83\xbc))*$/ (カタカナ) 長音ってひらがな/カタカナ共通でいいんだよね…?(参考: http://ash.jp/code/unitbl…

キャッシュを手軽に

PHP

キャッシュを手軽に実装するなら、PEAR::Cache_Liteがよさげ。ちょっと中を調べてみる。

超・極める! PHP

PHP

書泉グランデに行ったらあったので買ってきた。超・極める! PHP作者: 秋元裕樹,市橋一宣,大垣靖男,小山哲志,上鍵忠志,高橋邦彦,田中正裕,月宮紀柳,鶴岡達也,鶴岡直也出版社/メーカー: 翔泳社発売日: 2006/05/18メディア: 大型本 クリック: 58回この商品を含…

include_pathを追加する関数

PHP

単純な関数だけど必要な場合もあるので: function addIncludePath($path) { if (file_exists($path)) { $include_path = get_include_path() . PATH_SEPARATOR . $path; if (set_include_path($include_path) !== false) { return true; } } return false; }…

フレームワーク一覧

http://d.hatena.ne.jp/koyhoge/20060327/1143444511 id:koyhogeさんがまとめているフレームワーク一覧にMoonyが追加されていました。Moonyの指摘をしてくださったid:elfさん、ありがとうございます。精進いたします…。それにしてもたくさんあるなw

配列の値を取得する関数

ただし、該当するキーが存在しない場合は代替値を返す。Moony_Utilsに追加。 function getArrayValue($key, $array, $alt = null) { if (is_array($array) && isset($array[$key])) { return $array[$key]; } return $alt; }PHPの配列関数の引数のほとんどは…

Webアプリセキュリティ対策入門

PHP

大垣さんの本を買った。Webアプリのセキュリティ対策に関して体系立ててまとめられていて、かなりよい。実装サンプルはPHP。ただしPHP5が前提となるので、その点を考慮して読むこと。Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?作者: 大垣靖男…

Camel Caseにする関数

Moony_Utilsに追加する。 function camelCase($str, $delim = '_') { if (strlen($delim) == 0) { return ucwords($str); } $words = explode($delim, $str); for ($i = 0; $i < count($words); $i++) { $words[$i] = ucfirst($words[$i]); } return implode…

テンプレートエンジン、Flat Frog

PHP

開発が中止になっていたSmarty-Lightだけど、後継プロダクトの開発が始まっている模様。名前はFlat Frogに変更されている。蛙?http://sourceforge.net/projects/flatfrog

文字列の"幅"を取得

PHP

mb_strwidth関数があるのだけれど、文字コードのマッピングの違いによって期待する値が返ってこないことがあるらしい(http://ns1.php.gr.jp/pipermail/php-users/2005-October/027806.html)。それも困るので、取得するための関数を作っておく。 function g…

テンプレートエンジン

PHP

個人的にテンプレートエンジンに期待するのは以下の点: テンプレート内の変数に割り当てた値が表示されること 条件分岐を記述するための制御構造を持っていること 繰り返し処理(ループ)を記述するための制御構造を持っていること 他のテンプレートファイル…

PATH_INFOが取れない場合

PHP

Windows上のlighttpdでCGIとしてPHPを動作させる場合、PATH_INFOがうまく取得できない(昨日の記事)。調べてみると、そもそも$_SERVERにPATH_INFOというキーが存在しないようだ。REQUEST_URIとSCRIPT_NAMEは存在するので、それぞれの差分を取ればPATH_INFO…

lighttpdを試してみたけど

PHP

http://b.astronote.jp/log/eid62.htmlを参考にlighttpdをWindowsにインストール。単純なPHPなら動くのだけれど、PATH_INFOが取得できない。FastCGIで動作する場合は設定すれば取得できるようだが、単なるCGIとして動作させた場合は取得できない模様。Window…

mb_convert_variables

PHP

mb_convert_variablesっていう関数があることを知った。渡した変数(配列を含む)の文字エンコーディングの変換をしてくれる。 使い方は: mb_convert_variables('UTF-8', 'EUC-JP', &$src);参照渡しで変換したい変数を参照渡しで引数に設定する。今まではこ…

リダイレクトの方法

PHP

念の入ったリダイレクトの方法が以下のページに記載されている。確かにここまでやれば完璧だろう。 http://www.zend.com/tips/tips.php?id=246&single=1 function forceRedirect($url,$die=true) { if (!headers_sent()) { ob_end_clean(); header("Location…

PEARパッケージの作り方

PHP

MoonyをPEARのパッケージにしてみるテスト。 まず、PEAR::PEAR_PackageFileManagerを利用してpackage.xmlを作成する。 まだalphaバージョンの1.6.0a6をインストール。 $ pear config-set preferred-state alpha $ pear install --alldeps PEAR/PEAR_PackageF…

Smarty-Light、開発/サポートを終了

PHP

http://www.paullockaby.com/faq/#0015 によると: What happened to Smarty-Light?I was emailed by the maintainers of Smarty alleging trademark violations between my name and theirs. At the same time, I was growing frustrated with the syntax li…

開発環境

PHP

PHPどうやって開発してる?という話題に関して。 PHPを始めたころ エディタ: サクラエディタ サーバ: Windows上のApache DB: Windows上のMySQL ちょっとお試し期間 エディタ: PHPEclipse サーバ: Windows上のApache DB: Windows上のMySQL CVS: Eclipse + Cyg…

サーバステータスを返す方法

PHP

PHPで404を返す(サーバステータスを返す)方法を検索してきた方がいるようなので、メモしておく。 header('HTTP/1.0 404 Not Found');Internal Server Errorだったら: header('HTTP/1.0 500 Internal Server Error');詳しくはマニュアルのhttp://jp.php.net…

ActiveRecord実装

PHP

http://d.hatena.ne.jp/kunit/20051219#1135000448 http://kunit.jp/maple/wiki/index.php?%B3%C8%C4%A5%2FDb%2FActiveGateway いよいよPHP4でのActiveRecord実装、ActiveGatewayの全体像が見えてきた。動作にはPEAR::DBが必要。削除日時項目を使った論理削…

セッションIDの再生成

PHP 5.1以降なら、単純に session_regenerate_id(true);でいいのだけれど、それ以前の環境だと引数が取れないので使えない。しかも、ただ単に session_regenerate_id();とやると、セッションをファイルベースで管理している場合はそのファイルが残ってしまう…