OSの判別
そふぃのPHP入門 >> サンプルスクリプト >> Tips >> OSの判別

OSの判別

OSの判別には

  • PHP_OS
  • DIRECTORY_SEPARATOR
  • PATH_SEPARATOR

などが便利

OS判別

ローカル環境とサーバ環境でOSが違うというのは一般的だと思いますが、そのようなOSの判別には、PHP_OSという定数が便利です。PHP_OSはPHPに組み込まれている定数で、PHPを実行中のOSの名称を取得する事ができます。

OS名出力サンプル

  1. <?php
  2. echo PHP_OS;
  3. ?>

出力結果

Linux

PHP_OSがどのような値になっているかは、もちろんOSによって違うのですが、一般的なものに以下のようなものがあります。

  • AIX
  • Darwin
  • MacOS
  • Linux
  • SunOS
  • WIN32
  • WINNT

ローカルのテスト環境がWindowsで、公開用のサーバがLinuxなどという環境の違い程度であれば、この定数で簡単に判別する事ができます。

OS判別サンプル

  1. <?php
  2. if (PHP_OS == "WIN32" || PHP_OS == "WINNT") {
  3.     // Windwos用の処理
  4. } else {
  5.     // サーバ環境用の処理
  6. }
  7. ?>

ところで、上記のようなWindow環境とサーバ環境の判別で振り分けておきたいものの中には、ディレクトリの区切り文字やインクルードパスの区切り文字などがあるかと思います。

ディレクトリの区切り文字は、Windowsで「\」ですが、Linuxなどでは「/」が使用されています。

インクルードパスの区切り文字は、Windowsが「:」(コロン)で、Linuxなどは「;」(セミコロン)です。

この2つはOSの違いの代表的ものなので、上記のような判別式で判別しようとしてしまいそうなのですが、実はこれにも便利な定数が用意されています。

OS関連の定数

  1. DIRECTORY_SEPARATOR; // ディレクトリの区切り文字
  2. PATH_SEPARATOR; // パスの区切り文字

DIRECTORY_SEPARATORPATH_SEPARATORもPHPに組み込まれている定数です。DIRECTORY_SEPARATORはディレクトリの区切り文字を、PATH_SEPARATORはパスの区切り文字を取得する事ができます。それぞれOSによって中身がちゃんと変わっていますので、いちいちOSの判別用の条件分岐を使う必要はありません。

つまり、ディレクトリの記述には条件分岐をせず、以下のような記述で十分です。

ディレクトリの設定サンプル

  1. "dirname" . DIRECTORY_SEPARATOR . "filename";

インクルードパスの設定なら以下のような記述ができます。

インクルードパスの設定サンプル

  1. set_include_path(get_include_path() . PATH_SEPARATOR . "pathname");