12

PHPプログラムの中から、それを実行しているバイナリの場所を知りたいです。Perlは$^Xこの目的のために持っています。PHPに同等のものはありますか?

これは、(パスをハードコーディングしたり、「php」が正しいと想定したりするのではなく)それ自体を使用して子PHPプロセスを実行できるようにするためです。

アップデート

  1. Apache + mod_phpではなく、lighttpd+FastCGIを使用しています。そうです、PHPバイナリがあります。
  2. eval / includeは、リクエストを超えて存続する必要があるサーバーを生成しているため、解決策ではありません。

私が試したがうまくいかないこと:

  • $_SERVER['_']コマンドラインからは必要なもののように見えますが、実際には、最後に実行されたプログラムのシェルによって設定された環境変数からのものです。Webサーバーから実行する場合、これはWebサーバーのバイナリです。
  • which phpPHPバイナリは、Webサーバーのバイナリと同じであることが保証されていないため、機能しませんPATH

前もって感謝します。

4

7 に答える 7

16

PHP_BINDIR定数は、phpバイナリが存在するディレクトリを提供します

于 2009-08-13T20:05:34.300 に答える
3

ええ、$_SERVER['_']あなたが話していること、または存在する限り近くです。Webから実行されたときにWebサーバーのバイナリを取得する理由は/usr/bin/php、Webサーバーの実行とは何の関係もないためです。実行されているのは別のSAPIです。/usr/bin/php存在する理由がないため、WebPHPインスタンスから指摘するものは何もありません。

于 2009-08-13T20:03:35.680 に答える
1

定数はおそらく最もPHP_BINDIR使いやすいものです。私が思いつく次善の策は、基本的に、extension_dir構成設定からそのbindirパスを再作成することです。

$phpbin = preg_replace("@/lib(64)?/.*$@", "/bin/php", ini_get("extension_dir"));

正規表現が含まれているため、ネイティブのperl(!)のように感じられますが、それ以外の点では特に最適ではありません。

于 2009-08-15T12:24:44.657 に答える
1

PHP5.4では、PHP_BINARY定数を使用できます。これは、mod_phpなどでは機能しませんが、CGIなどでは機能します。

以前のバージョンのPHPのreadlink('/proc/self/exe');場合はおそらく問題ありませんが、mod_phpでは機能しません。

于 2014-10-28T15:04:34.317 に答える
0

phpのインストール方法に応じて、php実行可能ファイルを見つけることはできません。phpがapacheモジュールのようなWebサーバーのモジュールとして実行されている場合、呼び出すことができるバイナリはありません。php_info()を調べると、すべてが一覧表示されます。phpへのパスもあります。そのパス内で、phpバイナリを想定できます。

しかし、なぜ余分なプロセスを呼び出したいのですか?includeコマンドまたはevalを使用して、他のphpファイルを実行できます。新しいプロセスを生み出す理由はありません。

于 2009-08-13T21:05:37.760 に答える
-1

xdebugを構成してインストールするためにMac(OSX El Capitan)でphp7実行可能ファイルを探していました(実行するphpizeの正しいバージョンを見つける必要があります)。私が見つけた解決策はどれも私にはうまくいかなかったので、私はそれを探してしまいました:

find / -name php -print

私は(phpinfo()から)php7を実行していることを知っていたので、findによって提示されたオプションから正しいディレクトリを推測することができました。

于 2016-05-07T13:13:28.173 に答える
-2

どうですか: <?php exec("which php"); ?>

しかし、それはunix / linuxのみです:D

于 2009-08-15T09:31:49.093 に答える