posix_uname()の代替

問題点

posix_uname()の返却値から実行環境を判断してアプリケーションの挙動が変わるように実装していました。 最近作ったphp環境で、posixモジュールが無効になっていて、この箇所が動きません。

php -r 'print_r(posix_uname());'
PHP Fatal error:  Call to undefined function posix_uname() in Command line code on line 1

posixモジュールが無い

php -r 'print_r(get_loaded_extensions());' | grep posix

remiレポジトリからyumらせて貰っているのですが、configure オプションで--disable-posixが指定されているようです。

代替

コンパイルすれば良いのですが、それも大変だということで、代わりを探してみると、php_uname()という関数がありました。

php -r 'echo php_uname();'
Linux hogehoge-host 2.6.18-194.11.1.el5 #1 SMP Tue Aug 10 19:09:06 EDT 2010 i686

posix_uname()は、下記のように項目ごとにarrayになっているので、特定情報を取りやすいのですが、まあ同じような情報を取得できそうです。

php -r 'print_r(posix_uname());'
Array
(
    [sysname] => Linux
    [nodename] => mogemoge-host
    [release] => 2.6.18-194.11.4.el5
    [version] => #1 SMP Tue Sep 21 05:09:20 EDT 2010
    [machine] => i686
    [domainname] => (none)
)

facebook slideshare rubygems github qiita