今回、rfriendsを製作するにあたり検討したことは
- できるだけ共通のソースとすること
- 使用するツールがどちらのプラットフォームにもあること
- 開発時間があまりとれないのでCUIツールとすること
です。結果、次のようなことになりました。
- 開発言語はPHP。javaにしようかとも考えたのですが、試行錯誤で作っていくのにはインタプリタのほうが楽だろうと考えました。バージョンは最初5で作ったのですが、7に上げても問題なかったので7にしました。
- ツールは、次のものを選択しました。動作に違いがあると困るなと思ったのですが、今のところ大丈夫なようです。wget,swfextract,rtmpdump,ffmpeg,neroaactag,magick,mp4box
PHPのコーディングで注意したことは
- 文字コード。utf-8で問題ないと思いましたが、Windowsがバッチ等ではSJISになりがちなので文字化けに苦労しました。ログ等の出力はスクリプトの最初にutf-8の全角スペースを出力することで対処しました。
- ディレクトリセパレータ。定義済定数の DIRECTORY_SEPARATOR を使用しました。
- 改行コード。定義済定数の PHP_EOL を使用しました。
以上でほとんど問題なかったのですが、一部処理を変える必要がありました。例えば自動実行の登録部分です。Windowsはschtasks、Linuxはatです。そういった部分は、
if (PHP_OS == "WINNT" || PHP_OS == "WIN32") {
// Windows 処理
} else {
// Linux 処理
}
で、処理を分けました。
両対応には直接関係ありませんが、Windowsのバッチ処理でコマンドプロンプト(黒い画面)を出さないようにするのに苦労しました。
vbsで画面なしの起動をさせることで対処できました。「バッチ 黒い画面 表示しない」で検索すると、同じ悩みの人がたくさんいたようでたくさんヒットしました。どうもありがとうございました。