PHP で YUI Compressor を使って JS, CSS ファイルを圧縮

しかも PHP4 縛り(PHP4.3.9)で。

PHP で JS や CSS ファイルを圧縮したい時って、これだ!という決め手のライブラリがないような。更に PHP4 っていう制限がつくともう YUI Compressor しか選択肢がなかった。(圧縮率云々の前に)

でも PHPYUI Compressor もライブラリとして動くのは PHP5 しか見つからない。こうなると YUI Compressor をコマンドラインから叩くしかない。

という事で YUI Compressor をダウンロードしてくる。
http://developer.yahoo.com/yui/compressor/

使用するのは build ディレクトリの中の yuicompressor-2.4.2.jar 。(使うのは最新版の 2.4.2)これを java コマンドで叩いてやる。ちなみに開発機は Windows

java -jar yuicompressor-2.4.2.jar hoge.js

これで最低限圧縮できるけど、ちゃんと圧縮できるまでいくつかハマったのでメモを。

ネットで見つけた引数順をあてにしてたらコマンドが実行できなかった(^q^)

出力するファイル名も指定する場合引数順はこう。

java -jar yuicompressor-2.4.2.jar -o output-min.js input.js

input.js が元のファイル、output-min.js が出力ファイル。

分からなかったらおとなしく -h でヘルプを見ましょう。

Javaのエラーが出まくる。JSファイルのライン番号らしきもの出力されてるけど分かりません(^q^)

例えばこういったエラーが観測された。

[ERROR] 9952:5:syntax error
[ERROR] 9962:20:missing ) after argument list
[ERROR] 9986:60:unterminated string literal

JSの構文がおかしいように見えるのが厄介。
今回の場合コマンドの引数にエンコード指定してなかったのが問題だった。
久々にエンコード周りでハマった…。

ちなみに UTF-8 でファイルを保存してる場合 BOM 付きだとまた別のエラーを吐くので注意。

java -jar --charset UTF-8 yuicompressor-2.4.2.jar -o output-min.js input.js


こんなところだろうか。
あと指定しなくても勝手に解釈してくれるけど、MIME-TYPE の指定もできる。

java -jar --charset UTF-8 --type js yuicompressor-2.4.2.jar -o output-min.js input.js

このコマンドを PHP の exec から使ってやれば PHP4 でもファイルの圧縮が行なえます。

$cmd = 'java -jar --charset UTF-8 --type js yuicompressor-2.4.2.jar -o output-min.js input.js';
$out = '';
exec($cmd, $out);


さて、結構時間取られちゃったから早く先を進めないとな…。