k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

SPL

Windows環境のPHPで日本語ファイルパスを扱う場合の注意点

まず手元の Windows7 + PHP 5.6.0 で検証した上での結論を書くと 「Windows で日本語ファイルパスを扱う場合 SplFileInfo は使うな」 です。 ロケール設定を適切に行うことで basename() や pathinfo() に関しては、Shift_JISのコード表に起因するいわゆる「…

offsetExistとPHPTALの罠

テンプレートをValidに書けることが売りの(?)テンプレートエンジン PHPTAL で、 マジックメソッド、ArrayAccessインタフェースを実装した配列風オブジェクトを使った時に引っかかった罠についてメモです。 内容的には ArrayAccess + マジックメソッドで公…

issetとemptyとoffsetExist

タイトルは「いとしさとせつなさと…」みたいな感じで読んでください。 マジックメソッド、ArrayAccessインタフェース、Traversableインタフェースを実装した配列風のクラスを作成する際に引っかかりがちな(?)、__isset() と offsetExists() の仕様上の罠…

ArrayAccess + マジックメソッドで公開する値と内部の値を変換するクラスにTraversableを実装する際の注意点

とてもターゲットの狭い記事ですが、ほぼ自分用メモです。 たとえば、外部からセットされたDateTimeオブジェクトを内部的にUnixTimestampに変換して保持し、外部に返す際は再びDateTimeオブジェクトに変換して返すようなオブジェクト。 そのために、マジック…

SplFileInfoのメソッドとファイルシステム関数の比較調査メモ

PHPマニュアルの説明を読んでも違いがよく分からない SplFileInfo のファイル名やパスを取得する類のメソッドを、ファイルシステム関数と比較調査したメモです。SplFileInfo::__construct() の説明には "file_name で指定したファイル用の新しい SplFileInfo…

Fileinfo関数でMIMEタイプを取得する

Fileinfo関数は以前はPECL拡張モジュールでしたが、PHP5.3.0以降は特にCライブラリの追加も必要なく、デフォルトで有効になってます。 今回、初めてこの関数をWindows版で使ってみたメモです。サンプルコード ソートとか余計な処理も入ってますが、Recursive…

RecursiveIteratorIteratorとRecursiveDirectoryIteratorで再帰ファイル処理してみた

下記のような構造のディレクトリとファイルに対して、RecursiveDirectoryIteratorで走査し、RecursiveIteratorIteratorで処理を行う場合 DIR ├──DIR-1 │ ├──DIR-1-1 │ │ ├──DIR-1-1-1 │ │ │ ├──FILE-1-1-1-1.php │ │ │ └──FILE-1-1-1-2.txt │ │ ├──FILE-1-1-…

SplFileObjectとPHP5.4のCallbackFilterIteratorでCSV処理

普段はSPLをほとんど使っていない(DBからのファイル出力でIteratorを使ったことがあるくらい)のですが、練習のためにSplFileObjectを使ったCSV処理を書いてみました。 ただそれだけだと面白くないので、SplFileObjectを拡張してcurrent()メソッドにコール…