#navi_header|PHP| * OSの判定方法 何種類か出てくると思います。 ** DIRECTORY_SEPARATORでざっくりと分類する方法 Windowsとそれ以外でざっくりと分類するのであれば、DIRECTORY_SEPARATORが"/"か"\"かで見分けても問題ないかなと思います。 PATH_SEPARATORで見分けても良さそうですが、PATH_SEPARATORはPHP4の古いバージョンだと未定義だったりします。昔のPHPコードを見てると、むしろDIRECTORY_SEPARATORからPATH_SEPARATORの定義を切り分けてたりします。 if (!defined('PATH_SEPARATOR')) { if ('/' == DIRECTORY_SEPARATOR) { // UNIX系 define('PATH_SEPARATOR', ':'); } else { // Windows define('PATH_SEPARATOR', ';'); } } ** "OS"環境変数 or PHP_OS定数から見分ける方法 具体的にOS名を取得したい場合は環境変数の"OS"から見分けても良いと思います。PHP_OSという定数も定義済です。環境変数の方が若干細かいようですので、用途に合わせてという感じです。 > php -r "echo getenv('OS');" Windows_NT > php -r "echo PHP_OS;" WINNT ** Mac OS X 以降でのOS判定間違いコード PHP_OSなどからWindowsか否かを判定する場合、Mac OS X が出現する前は次のようなコードでも問題有りませんでした。 if (false != strpos('win', strtolower(PHP_OS))) { ... } しかしMac OS Xの場合はOS名に"Darwin"と入るようですので、上記コードだとOSXまでWindowsだと勘違いされます。 Smartyのコードからの拝借ですが、次のように「先頭から3文字」を取得して比較するのが安全だと思われます。 if (substr(PHP_OS,0,3) == 'WIN') { ... } * Smartyのdate_formatの罠 Smartyのdate_formatの %Y %D の指定がなんか変に感じたので、試しにソースを当たってみたら if (substr(PHP_OS,0,3) == 'WIN') { $_win_from = array ('%e', '%T', '%D'); $_win_to = array ('%#d', '%H:%M:%S', '%m/%d/%y'); $format = str_replace($_win_from, $_win_to, $format); } Windowsの場合勝手に変換してくれてるようです。date_formatでは%Dを %m/%d/%y にしちゃう。(実際にフォーマットしているstrftime()自体がそういう仕様)なので、短くかけてラッキーと思っていたら、%y/%m/%dじゃなくてちょっと残念だった。 #navi_footer|PHP|