PHP

PHPerのMVCの一体どこが間違っていたのか

メリークリスマス! PHP Advent Calendarもいよいよ24日目に突入です。 昨日はxhprofについてでしたね。僕もパフォーマンスチューニングの際に使っています。手軽に利用できるのでお勧めです。さて、このエントリーでは表題の通りMVCについて書かせていただ…

携帯向けAgavi拡張の設計

社内では携帯向けAgavi拡張(KtaiAgavi/非公開)を作って利用しているけども、どうも使いにくいので設計を見直してみたい。折角なので公の場で開発しようかと思う。 キャリア判定 KtaiAgaviではキャリア判定をRequest初期化時にUserAgentを元に行っている。け…

セッションIDの構成文字

PHP

PHPがデフォルトで生成するセッションIDの構成文字は何だろう。 マニュアルにはsession_id関数で指定できるセッションIDに制限があることは記述されています。 セッションハンドラによっては、セッション ID として使用できる文字に 制限がある場合がありま…

Doctrineのモデルクラス接頭辞に"_"を入れると面倒

Doctrineでは、managerやconnectionの属性としてDoctrine_Core::ATTR_MODEL_CLASS_PREFIXに接頭辞を設定することができます。 また、Doctrine_CLIでyamlからモデルクラスを生成する場合は$config['generate_models_options']['classPrefix']を設定することで…

第51回PHP勉強会に行ってきました。

PHP

100回へ向けた折り返しとなる第51回PHP勉強会@関東に参加してきました。 前回の大盛況と打って変わって今回は大量のキャンセルなどにより8名分枠が余っていました。もったいない。 感想と突っ込み CodeIgniterのUnit_testクラスとHMVC (nekogetさん) CodeIgn…

HTML_Emojiを読んでみた。

昨日の続きで今日はHTML_Emojiを読んでみました。 処理は単純でUTF-8に変換したものをpreg_replace_callback使って絵文字っぽい私的領域を抜き出して連想配列のマップで置き換えるだけ! また、ソース読んだだけでも分かりますが、作者のベンチマークによる…

Text_Pictogram_Mobileを読んでみた。

なんとなくXdebugでプロファイルをとってみたら、絵文字変換に半分以上持っていかれていたので絵文字変換を高速化したいなと思い動きだしました。 現在はMobilePictogramConverterをPHP5対応させたものを使っているのですが、他のライブラリも見ておこうと思…

第49回PHP勉強会@関東に参加してきました。

PHP

第49回PHP勉強会@関東に参加してきました。今回も遅刻しました。すみません。準備を終えて出発しようとノートパソコンをシャットダウンしようとしたらWindows Updateがあると言われてて「まぁ平気だろ」と軽いノリで実行したら32件も有って家を出られません…

HTML_CSS_Mobileのバグフィックスを投稿しましたよ

PHP

CSSをインライン展開してくれるライブラリのHTML_CSS_MobileのバグフィックスをCodeReposに投稿しました。 直したバグは二つありそれぞれ別ブランチを切ってコミットしてあります。そのうちopenpear版にも取り入れられるかと思いますが、必要な方はCodeRepos…

utterramblingsのphp-pgsql+php-pdoでPostgreSQL8.4にアクセスするとSegmentaion Fault

PHP

表題のような現象が起こった。仕方がないのでphp-5.2.11のソースを持ってきてpdo_pgsqlディレクトリでphpize;./configure;makeして出来上がったpdo_pgsql.soを/usr/lib/php/modules/pdo_pgsql-8.4.so*1にコピーして、/etc/php.d/pdo_pgsql.iniの参照先を変更…

単純ベイズ分類器がほしい

PHPで使える単純ベイズ分類器(Navie Bayesian Classifier)がほしいと思ったので具体的な仕様をメモしておきます。将来的に造ろうと考えている人(含む自分自身)は是非ともこのメモを読んで希望をかなえてください! PEAR、openpear*1などpearチャネルからの配…

Phar拡張のストリームラッパーでtar.gzファイルを開く

PHP

PHP5.3.0から標準で組み込まれるようになったPhar拡張ですが、こいつはPharアーカイブを扱うだけではなくtarやtar.gzも扱えます。また、それらを扱うためのストリームラッパーを提供しています。 ということで、ホントにPhar拡張を使ってtar.gzファイルを展…

HTTP_Request2でハマった

PHP

Net_CicindelaでHTTP_Request2を利用してるんですが、なぜかAgavi-0.10から呼び出すとNet_CicindelaがアクセスするURLのクエリ部分の&が&になってしまう現象が起きました。 半日かけて調べた結果、HTTP_Request2が利用しているNet_URL2でデフォルトのク…

CSV_Iteratorをリリースしました

PHP

CSVファイルをイテレートするためのクラスCSV_Iteratorをopenpearでリリースしました。 コンストラクタの第二引数で入力ファイルのエンコードを指定でき、Shift_JISやUTF-16,ISO-2022-JPなどでエンコードされたファイルも扱うことができます。 また、コンス…

第45回PHP勉強会参加してきました

PHP

ということで、表題どおり第45回PHP勉強会に参加してきました。 今回は六本木にあるお好み焼き屋「はてな」さんを3時間半貸し切って飲み食いしながらの大LT大会でした。長時間の貸切を安価で提供していただきありがとうございました。 僕の発表は自己紹介程…

NetBeansのPHPエディタのインデントが気に入らない

どうもインデントが気に入らない。 {直後のコメントのインデントが崩れる ブロックを開いた直後のコメントブロックがブロック外のインデントレベルに揃えられてしまいます。

CicindelaのwebAPIラッパをopenpearで公開

これからPHP製レコメンデーションエンジンをリスペクトCicindelaな感じで作っていこうかと思っているわけですが、WebAPIに関しては申し分ないのでCicindelaのWebAPIをPHPから叩くためのライブラリを作成して、openpearで公開しました。 仕事の時間に作ったの…

第41回PHP勉強会@関東で発表してきました

PHP

タイトルどおりです。第41回PHP勉強会@関東でAgaviの宣伝をしてきました。資料作りが間に合わなかったので最後がグダグダでしたが、どうだったでしょうか。 明日以降に資料をうpします。忘れてたらワッサーなどで発破をかけてください。多分忘れます。なん…

きちんと伝えられなくて申し訳ない

id:yoyaさんが発表内容に触れてくれていたんですが、きちんと伝えられていなかったようなので補足させていただきます。 冒頭のフレームワーク話しは XSS対策で入力バリデート強化って時点で…なんていうか、サニタイズ言うなや的な… XSS脆弱性の報告によって…

Agavi 1.0.0がついに出ました。

via: http://blog.agavi.org/post/81642413/its-finally-done-agavi-1-0-0-has-arrived リリースアナウンスおよびリリースノートは近日中に翻訳して公開します。

コードテンプレート

NetBeansでAgavi利用のコードを書くときに便利なコードテンプレート public function execute${Target}(AgaviRequestDataHolder $rd) { ${cursor} } これをexあるいはetという省略名で入れておくとexecuteWrite,executeRead,executeJson,executeXmlなんかを…

0.11.5以前1.0.0beta7以前のバージョンにXSS脆弱性が発見されています

RFC 3986に従っていない一部のブラウザ(Microsoft Internet Explorer 6,7)からのリクエストによりREQUEST_URIやQUERY_STRINGが汚染される問題により、下記のメソッドの戻り値が汚染される問題が判明しました。 AgaviWebRouting::gen(null) 'bar') )などは除…

mb_えんこで_みめへあでr

PHP

もしかして:mb_encode_mimeheaderローマ字入力のまま検索して悲しかったので、同じ間違いを犯した人がたどり着くことを望んで ここに記す。

factories.xmlで定義されたクラスの初期化順序

factories.xmlで定義されるシステムクラスの初期化のタイミングが気になったので調べてみた。以下はfactories.xmlのコンパイルキャッシュです。 databaseManager = new AgaviDatabaseManager(); $this->databaseManager->initialize($this, array ()); $this…

hasManyしたレコードはあんまりjoinしない

DoctrineでhasManyした(1対多あるいは多対多の関係にある)レコードを複数joinすると劇的に遅くなります。 Doctrineがよしなにやってくれるかと思いきや単純にjoinしてしまうので、結果セットが爆発的に膨れ上がります。今回は5つほどjoinしたら1700行強返…

Agaviで生成されるmod_rewrite

Agaviのコマンドで生成される.htaccessに書かれているmod_rewirteは RewriteRule ^$ index.php?/ [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) index.php?/$1 [QSA,L]これだとディレクトリが存在して…

BooleanValidator

なかったので作ってみた * * @version $Id$ */ class BooleanValidator extends AgaviValidator { /** * Validates the input. * * @return bool * * @author MugeSo <mugeso@mugeso.com> */ protected function validate…</mugeso@mugeso.com>

誤った脆弱性報告

Agaviに関する誤った脆弱性報告が出回っていたようです。ref:False Agavi Vulnerability Reports 簡単に言うとフランスのある代理店がAgavi-0.11を用いて制作した複数のサイトでディレクトリトラバーサル脆弱性が見つかり、これはフレームワーク外の実装に問…

International PHP Conference 2008

ドイツのマインツで行われる国際PHPカンファレンス2008(International PHP Conference 2008)でAgaviの公演が行われるそうです。 是非とも行きたいところですが、何せドイツは遠い。 あと、参加するAgaviユーザのためにAgaviTシャツも用意しているそうです。…

Agavi-0.11.4リリース

Agavi-0.11.4がリリースされました。 以下リリースアナウンスの邦訳 今日は皆さんAgavi 0.11.4 がでました!これは0.11.3で導入されたサンプルアプリの問題やautoload.xmlへのクラス記入漏れといった諸問題の修正をおこなったメンテナンスリリースです。 ま…