3

私はかなり長い間検索しましたが、定数PHP_OSにphpが構築されたOSが含まれているか、実行されているかという質問に対する明確な答えが見つかりませんでした。

php_unameのphpドキュメント(http://php.net/manual/de/function.php-uname.php)には、次のように記載されています。「オペレーティングシステムの名前については、PHP_OS定数の使用を検討してください。ただし、この定数に注意してください。 PHPが構築されたオペレーティングシステムが含まれます。」

ただし、まったく同じページに、2006年のコメントがあります。「最後のメモとは異なり、PHP_OSは、PHPが現在実行されているOSを表示します。[...]これは、PHPが構築されたシステムとは関係ありません。 「」

この質問に関して、Web上のどこにも明確な答えは見つかりませんでした(php_unameとPHP_OSに関するトピックは、ほとんどの場合、OSの検出と同様のトピックのみをカバーしています)。今何が-ドキュメントまたはコメント?

pear-coreパッケージはPHP_OSを使用して、Unixライクなシステムで実行されているのかWindowsで実行されているのかを判断します。したがって、ドキュメントが実際に間違っていると想定しても安全ですか。

4

2 に答える 2

6

ソースコードを見てみました。configure スクリプトはこれを行います:

PHP_OS=`uname | xargs`
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS",[uname output])

そして、main.cこれを行います:

char *php_os;
php_os=PHP_OS;
REGISTER_MAIN_STRINGL_CONSTANT("PHP_OS", php_os, strlen(php_os), CONST_PERSISTENT | CONST_CS);

これはPHP_OS、PHP ではphp_osC コードに含まれていたものであり、configure スクリプトによって構築されたヘッダー ファイルによって #define されたものであり、uname構成時に実行することによって決定されることを意味します。

したがって、それはあなたが構築されたシステムであり、実行されていたシステムではありません。

Windows 用の特殊なコードがいくつかあります:が定義されている場合にmain.c設定php_osします。しかし、繰り返しになりますが、これは実行時ではなくビルド時です。Unix でコンパイルして Windows で実行したり、その逆を行ったりしたとしてもです。"WINNT"WIN32

于 2012-04-27T10:08:03.807 に答える
3

PHP_OS(PHP 定数) は、PHP モジュールの起動時に定義される定数です。その値PHP_WIN32またはPHP_OSC の定数から取得されます (トレイルをたどると、最終的にthisにつながりますが、質問に答える必要はありません)。

したがって、それが説明しているのは、PHP が構築されたシステムです。

于 2012-04-27T09:57:33.560 に答える