PHP

SPLでイテレータを使ってみる

PHP

PHPにはSPL(Standard PHP Library)という便利……というほどには充実してないライブラリがあるんだけど、いまいち知名度が低いようで、あまり使ってるのを見たことがない。標準で組み込まれてるのに。 ちなみにC言語からプログラムを覚えた身としては、どうし…

Text_Diffでテキストの差分を取る

PHP

データの修正時に変更箇所が差分表示できたらいいよねー、という話が出ていたのでPHPでできるか試してみた。 一年ぐらい前にPEARのText_Diffというモジュールをちらっと見たことがあったのを思い出して使ってみた。 まー、なかったとしても裏でdiffコマンド…

バイナリデータをserializeしてもprintableにはならない

PHP

本日のハマりネタ。 セッションをファイルではなくDBに格納するということで、MySQLのカラム型をmediumtextにしていたら、バイナリデータの格納で落ちるという問題に出くわした。 カスタムハンドラに渡ってくる値はserialize済みの値なのでそのまま放り込む…

XML読み込みエラー時の詳細情報を取得する

PHP

XMLファイルを読み込む時、タグが欠けてるとか正しくないXMLだった場合に、どこそこでエラーだよって出したいわけだが、DOMDocument::load()はTRUE/FALSEしか返してくれないのでエラーが起きたことしかわからない。 なんだよこれどうすんだよ……と思ったらど…

arrayへのキャスト

PHP

引数をスカラでも配列でも受け取れるようにしたい時、次のようなコードを書いているんだが、あまりにも面倒くさいので時々array型にキャストしたくなってくる。

foreachの$valueを参照で受けると思わぬバグを引き起こす

PHP

PHP :: Bug #29992 :: foreach by reference corrupts the array PHP5からはforeachの$valueの部分を参照で受け取ることができるようになったんだが、このコードがいとも簡単に配列$arrayをぶち壊してしまうというお話。 上記コードの結果を予測できるかな?…

PHPで三項演算子のネストがおかしい

PHP

三項演算子のネストには賛否両論あるけど、時にはこういう風に書きたいこともあるわけで。 20 期待する出力は10なんだけど、なぜか20になる。 そこでこんな風にしてみたら……

一日前を得る(日付の演算)

PHP

2008/05/08 20:09:55 // 一日前(現在の昨日) $yesterday = strtotime('yesterday', $now); echo date('Y/m/d H:i:s', $yesterday) . "\n"; // -> 2008/05/07 00:00:00 // 現在からマイナス一日 echo date('Y/m/d H:i:s', strtotime('-1 day')) . "\n"; //…

PEARライブラリを利用する際の注意点

PHP

プロジェクトのコードを眺めていて気になる点があったので社内で周知すると共に、せっかくなのでブログにも書いてみるテスト。 PEAR DBでgetする際の戻り値 今さらPEAR DBを使うこともそうそうないと思うが、保守案件やレガシーなシステムへ追加で載せる場合…

存在しない要素にアクセスしたときのNoticeがうざい

PHP

[PHP] 存在しない配列のキーにアクセスしたときの挙動まとめPHP5で、配列ではない型の変数や、 配列でも存在しない識別子に対して $array["key"] の アクセスを行ったときの挙動のまとめです(from それなりブログ)あんな型やこんな型に対して添字アクセス…

Zend Framework Code Camp行ってきた

PHP

12日、13日と2日間かけてZend Framework Code Campハンズオンセミナーに参加してきた。定期的にやってるぽい。内容はZend Studioを使ってZend Frameworkの基礎を学ぶっつーか機能紹介っつーか。来て見て触って見て〜な感じ。 1日目はMVCの基本みたいなことや…

PHPのエクステンションを作ってみる

Shared Object(.so)の勉強はこれの布石だったわけだが、インフルエンザのようなただの風邪のようなものにやられてしまい、間が空いてしまった。 休み明けに出社してみたらなんか出来上がってるっぽくて、俺の苦労はいったい……って感じだったが、折角なのでま…

CGIじゃないけど.cgiで動かす

実装はPHPなんだけどPHPだと知られたくないらしく、/cgi-bin/foo/bar.cgiと/cgi-bin/foo/baz.phpで動かしたいとの要求があった。 とりあえず一行目にshebang*1を追加してアクセスしてみたらInternal Server Errorで撃沈。 ApacheのエラーログにPHPが何やらぐ…

動的呼び出しとリファレンス

PHP

自分はメタプログラミング大好き人間なので、ついついクラスの動的生成とかメソッドの動的呼び出しをしてしまうのだが、 PHPでコーディングしていてふと気になったことがあったので調べてみた。 何が気になったかというと、それは、マニュアルを見た限りだと…

開発環境を構築する(Windows版PHP5編)

PHP

開発環境を構築するシリーズまとめリンク 開発環境を構築する(Windows版PHP4編) - ぱせらんメモ 開発環境を構築する(Windows版PHP5編) - ぱせらんメモ 開発環境を構築する(Windows Apache2.0編) - ぱせらんメモ 開発環境を構築する(Windows Apache2.0…

開発環境を構築する(Windows版PHP4編)

PHP

開発環境を構築するシリーズまとめリンク 開発環境を構築する(Windows版PHP4編) - ぱせらんメモ 開発環境を構築する(Windows版PHP5編) - ぱせらんメモ 開発環境を構築する(Windows Apache2.0編) - ぱせらんメモ 開発環境を構築する(Windows Apache2.0…