PHP

続々・セッションID生成器を差し替える

PHP

php_session_hash-0.0.3devel.tgz session_hash エクステンションでは最初のバージョンからセッションIDの種として十分なビット長を確保するためにメルセンヌ・ツイスタによる疑似乱数を併用していたのですが、最近 SFMT というものを知ったので、擬似乱数生…

今日の小ネタ: partial()

PHP

PEP 309 のパクリ

続・セッションID生成器を差し替える

PHP

php_session_hash-0.0.2devel.tgz バグ修正と、Mhash 使用時のパフォーマンス向上と、セッションIDが既に使われているかチェックするためのコールバック関数をサポート。 files セッションセーブハンドラの場合はこんな感じで。

セッションID生成器を差し替える

PHP

php_session_hash-0.0.1devel.tgz セッションハンドラのセッションIDを生成する関数を差し替える拡張モジュールを書いてみました。 PHP4 でも PHP5 にある session.hash_function, session.hash_bits_per_character 相当の設定ができるほか、hash (または mh…

SHA-256 その後

PHP

昨日あたりから以前書いたSHA-256 - 讃容日記へのアクセスが増えているので、ちょっとだけフォロー。 あれから1年半で PHP で SHA-256 を使う手段も増えました。代表的な関数を3つ挙げます。 mhash (mhash extension) hash (hash extension) sha256 (suhosin…

Senna バインディングを修正してみた

PHP

php_senna-0.0.5devel.tgz configure で Senna のバージョンをチェックするようにした PHP 5.1.x で PHP_ME_MAPPING してあるスタティックメソッドが使えなかったのを修正 sen_index_update() で $newvalues か $oldvalues のどちらかは null を許可するよう…

Senna バインディングを拡張してみた

PHP

php_senna-0.0.4devel.tgz アドバンスト API もできましたー。作っただけでほとんどテストできてないです。危険かも。 sen_sym を使う関数は low level API が絡むので、コールバック関数を指定する関数/オプションは面倒くさいので実装してません。 あとち…

Senna バインディングを改良してみた

PHP

php_senna-0.0.3devel.tgz 以前作った別のモジュールとか ext/sqlite/sqlite.c 等を参考にしつつやった。反省は (ry PHP 4.4.6, 5.1.6, 5.2.1 で動作確認、4.3.x は不明、5.0.x はだめ アドバンスト API から sen_index_info() と sen_index_path() を実装 O…

Senna バインディングを作ってみた

PHP

php_senna-0.0.1devel.tgz 5時間ぐらいで一気に書いた。反省はしていない。 例によって雛形は CodeGen_PECL で作成。 ベーシック API のみ実装で、ほとんど C API のまんま。テストやドキュメントの類は皆無。 公式のAPI解説と同梱の examples/sen-test.php …

mimeTeX wrapper

PHP

なんとなくmimeTeX のラッパークラスを作ってみました。(MimeTeX.php) MathML を画像としてレンダリングする OSS があれば、使ってみたいところです。 display メソッドの使い方: '/usr/local/bin/mimetex', 'opaque' => true)); if ($tex->display($_POST[…

浮動小数点の罠?

以前のエントリで FreeBSD の PHP では log(64) の結果 float(6) を整数にキャストするとなぜか int(5) になるということを書きました。今回はその続き。 まず PHP の log 関数は ext/standard/math.c に実装されており、引数が二つの場合は RETURN_DOUBLE(l…

ひどい目に遭った

Mac OS X (PHP 4.4.5, 5.1.6, 5.2.1) でこれの実行結果は float(6) int(6)なのですが、FreeBSD 4.4 (さくら/PHP 4.4.4), FreeBSD 6.0 (自宅/PHP 5.2.1), FreeBSD 6.1 (さくら/PHP 4.4.4) では float(6) int(5)となりました。mjdsk あとで C で追試してみよ…

alt sendmail

PHP

メールを送信するプログラムを作るときのローカルテストでは、メールをデータベースに保存し、実際には送信しないようにしています。 内容の確認は専用の Web インターフェースで...と言いたいところですが、psql。 以下はそのための設定と PHP スクリプトで…

ConfiguratorChain を使ってみる

作成中のアプリケーションを Piece_Unity 0.11.0 の新機能であり、次の次のバージョン (1.0.0?) でデフォルトになるという ConfiguratorChain を使うように変更してみたので、そのときのメモです。 piece-unity-config.yaml にて まずはコンフィギュレータを…

参照を受け取る関数と call_user_func()

PHP

call_user_func() 関数で引数に参照を受け取る関数を呼んだ場合、その引数は内部的に一度コピーされた変数が渡されるため、PHP4 でオブジェクトを渡し、関数内でオブジェクトのプロパティを操作する場合など、ちょっと困ることがあります。 そこでコールバッ…

Flexy で携帯絵文字 (数字だけ)

PHP

Flexy のテンプレート内で使っているユーティリティクラスから数字の絵文字を返すメソッドを抜粋。 出力フィルタで UTF-8 から Shift_JIS (SJIS-win/CP932) に変換する前提で作成しているため、iモード用の絵文字は UTF-8 で返します。 (EZweb/SoftBank の絵…

Examples of Intercepor: Refined

都合がつかず、第5回勉強会には行けませんでした... orz 今回紹介するのは、以前作成した Interceptor の修正・改良版です。 Piece_Unity_Plugin_Interceptor_Mobile-preview2 Piece_Unity_Plugin_Interceptor_GarbageCollection-preview2 Piece_Unity_Plugi…

Examples of Intercepor

Intercepor プラグインを作ってみました。 package.xml はもちろんのこと、 DocBlock コメントも皆無ですが... 設定ポイントの解説は id:perezvon さんの http://d.hatena.ne.jp/perezvon/20070126/1169800012 を真似させていただきました。 Piece_Unity_Plu…

API Documentation for Piece Framework

phpDocumentor で Piece の API ドキュメントを生成してみました。 http://www.opendogs.org/doc/piece/ 以下のパッケージ/バージョンを文書化しています。 Piece_Flow 1.8.0 (stable) Piece_Right 1.4.0 (stable) Piece_Unity 0.10.0 (beta) Stagehand_FSM …

Apache2 で複数バージョンの PHP を同時に動かす

PHP

PPC Mac では PHP のバージョンごとにポートを変えて複数起動した Lighttpd をバックエンドにし、Apache2 の mod_rewrite で切り替えていたのですが、Intel Mac では Lighttpd の調子が悪いので Apache2 だけでやることにしました。httpd.conf より一部抜粋 …

CLI 専用 config-file-scan-dir

PHP

PHPプロ! Tips ML の「PHPの設定ファイルを分離する」記事に触発されて、僕の場合はどうしているか紹介します。 まず PHP の設定ファイルが読み込まれる順番について。 PHP_5_2 ブランチの main/php_ini.c によると、大まかには以下のようになっています。 …

腐ってやがる

PHP

json エクステンションですが、スカラーリテラルのデコード結果がことごとく NULL なのはひどいと思うのですが。 使う機会は少ないかもしれないけど、これはひどい。

Piece Uploader (仮)

Piece Franework の最新版がリリースされたので、さっそく example を使ってみました。 Layout 素晴らしい。自分でテンプレートごとに共通のヘッダとフッタを <flexy:include> していたのが何と無駄だったことか。 Interceptor_Authentication これも便利。設定でちょっと注</flexy:include>…

続・QR Code Extension

PHP

ライブラリの方はだいぶ体裁が整ってきました。libqr-20061220.tgz GNU Autotools の使い方をよく知らないし、好きじゃないので、いくつかのプラットフォーム用に手書きした Makefile を同梱してます。Mac OS X と FreeBSD で確認済み。 Python distutil か …

QR Code Extension 作成中

PHP

気を抜くとすぐ更新をサボってしまう僕ですが、ここ2,3日はこんな物を作ってました。 太田純さんが http://www.cmagazine.jp/contents/200407.html で公開されていたソースコードをベースにしています。 PHP エクステンションにする前に、C 言語のライブラリ…

セッション設定に気をつけて

第4回 Piece Framework 勉強会で、何故か "The flow name [ WizardForm ] not found in the flow definitions." と、フロー定義がねー YO! と怒られて先に進めなかった問題ですが、解決しました。 どうやらセッション関連の設定がまずかったようです。 エン…

is_numeric() & eval()

PHP

% php -r 'var_dump(is_numeric("+0123.45e6"), +0123.45e6); > var_dump(is_numeric("-0123"), -0123);' bool(true) float(123450000) bool(true) int(-83)この結果を踏まえ、is_numeric() で真となる文字列は、クォートしなかった場合 PHP のパーザで数値…

Hack#97

PHP

Piece Framework 勉強会の後の懇親会で出た(と思う)正規表現を使わずに整数であるかどうかを確認するにはどうするか?というネタと、Binary Hacks の Hack#97 - 浮動小数点数のビット列表現 を Pure PHP でやってみる、の両方をいっぺんに。ctype_digit() …

第4回 Piece Framework 勉強会

Piece の勉強会は今回が初参加。 静的なページでウィザードを作ってみるぐらいの予習はしておきたかったのですが、ぶっつけ本番で挑戦です。 神戸まで行くには以下のプランがあり、3番目はありえない(遅刻のおそれもある)ので1番目か2番目になります。 早…

unichr extension 0.0.2

PHP

Surrogate (Cs) に加え、 Noncharacter のコードポイントが与えられたときも False を返すように修正したバージョンです。 インストール方法はこちら。