CodeIgniterのファイル名はCase-Sensitive
久々にCodeIgniterでハマったのでメモ。
ローカルのWindowsで開発していたアプリを運用のためにLinuxのサーバにアップしたところ、訳のわからないところでエラーが出てまったく動かない。潜ってみると、原因はあるコンフィグファイルが大文字小文字の違いで正しくincludeされていなかったためだった。
たとえば自作ライブラリのクラス名を
CustomParser
とした場合、そのライブラリのファイル名は
application/libraries/CustomParser.php
コンフィグファイルを使うならそのコンフィグファイル名は
application/config/CustomParser.php
と、大文字小文字を完全に一致させる必要がある。
なおWindows環境ではファイル名はcase-sensitiveではないようなので、幸か不幸か問題なく動いてくれる。
Re: Yahoo!がPHPエンジニアを雇う時に聞く質問
20問ほど正解してしまった。
そろそろPHPから離れたほうがよさそうだ。少なくともPHP6が出るまでは。
しかし、こういう質問で採用される職には就きたくないなぁとつくづく思う。使い古されて捨てられるのが目に見えるようだ。業界を知らないから憶測の域を出ないが。
PHPでは配列のキーにbooleanが使える(使いたくないけど)
PHPの配列は、そのままハッシュテーブル(連想配列)として使える。
ふと疑問に思って試してみたところ、true/falseとnullがキーとして使えてしまった。
$array = array(); $array[true] = 'Keyed as TRUE'; $array[false] = 'Keyed as FALSE'; $array[null] = 'Keyed as NULL'; $array[0] = 'Keyed as 0'; echo $array[true]; // Keyed as TRUE echo $array[false]; // Keyed as FALSE echo $array[null]; // Keyed as NULL echo $array[0]; // Keyed as 0
なんじゃこりゃ。
ちなみにキー “” は キー null と同義で、キーにオブジェクトや配列を入れようとするとWarning: Invalid offsetと怒られた。
CodeIgniterのセッション問題解決
以前から数回にわたって書いてきたCIセッション問題が解決した。
問題というのは、セッションの有効期限を「ブラウザが閉じるまで」に設定できなかった件、そして個別のセッションについて期限を設定できなかった件だ。
CIのライブラリを拡張してDBのセッションテーブルの構造を含めかなり手を加えることになってしまったが、外観的にはメソッドが一つ増えただけのかなりスッキリした改造だ。
結局、クッキーをセットするときに期限を「0」にしておけば「ブラウザが閉じるまで」セッションになるということと、個別に期限を設定するにはそれぞれのセッションデータ自体に自らの期限を保存するしかないという二点が作業内容の主なポイントだった。
式の記述ミスで現行セッションがガーベジコレクションされてしまったりと前途多難だったが、今回の作業でありがたいと思ったのはテキストログの出力機能だ。主としてクッキーを扱う作業のため、これまでやってきたようなechoによるデバッグはできない。そこでメッセージをテキストファイルに書き出すCIの機能に大変お世話になった。こういうクリティカルな場面でなくとも、表示を乱さずにデバッグできるのは時によっては役に立つ。