OSの判定(PEARハック)
レンタルサーバとか、PEARのライブラリが入っていなかったり、include_pathが現在どうなっているか良く分からないときに、
define('ADDITIONAL_INC_PATH','/path/to/mylib');*1 define('PATH_DELIMITER', ':'); //for unix //define('PATH_DELIMITER', ';'); //for windows ini_set('include_path' , ini_get('include_path') . PATH_DELIMITER . ADDITIONAL_INC_PATH);
ってな感じで書いていて、PATH_DELIMITERの部分を開発環境のWindowsと、実際に動作すると思しきUNIXとでコメントアウトを変えていたんだけども、ちょっとめんどっちいなと前々から思っていた。*2
今日機会があって、PEARのソースをたらたら眺めていたんだけども、もともとPEARにはOS_Guess*3ってクラスがあって、それを使えば取得できることは知ってた。でもそれってなんだか仰々しい。
if (substr(PHP_OS, 0, 3) == 'WIN') { define('OS_WINDOWS', true); define('OS_UNIX', false); define('PEAR_OS', 'Windows'); } else {
な部分を発見。なるほどー。PHP_OSっていう定数があるのか!以下で検証。間違いない。
<?php echo PHP_OS; ?>
かといって先頭三文字がWINと等しいとかめんどっちいから上記のこのコードはPEAR.phpをrequire_onceすればラクチン!OS_WINDOWSっていう定数が設定されるからそれを使って自分で
$path_delim = OS_WINDOWS ? ';' : ':';
とかすればいいや、やった!とか思っていたら。もっと読んでみたら、そいつを使ってこんなこともしてるじゃないの!
// instant backwards compatibility if (!defined('PATH_SEPARATOR')) { if (OS_WINDOWS) { define('PATH_SEPARATOR', ';'); } else { define('PATH_SEPARATOR', ':'); } }
これで自分のコードは今後こうなることになりました。*4
require_once 'PEAR.php'; define('ADDITIONAL_INC_PATH','/path/to/mylib');define('PATH_DELIMITER', ':'); //for unix //define('PATH_DELIMITER', ';'); //for windowsini_set('include_path' , ini_get('include_path') . PATH_SEPARATOR . ADDITIONAL_INC_PATH);
とりあえずPATH_DELIMITERって名前が違ってちょっと残念でした、とかいう。