2009-08-13 17 views
7

PHPプログラムの中から実行しているバイナリの場所を知りたい。 Perlはこの目的のために$^Xです。 PHPに相当するものはありますか?現在実行中のPHP実行ファイルを調べるにはどうすればよいですか?

これは、パスをハードコードしたり、 "php"が正しいと仮定するのではなく、自分自身で子プロセスのPHPプロセスを実行できるようにするためです。

UPDATE

  1. 私はlighttpdの+ FastCGIのではなく、Apacheの+のmod_phpをを使用しています。だから、PHPバイナリがあります。
  2. 私は要求を超えて生き残っていなければならないサーバーを産んでいるので、eval/includeは解決策ではありません。私が試したと動作しません

もの:

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

ありがとうございます。

答えて

14

PHP_BINDIR定数はあなたにPHPのバイナリは、PHPを使用すると、PHPの実行可能ファイルを見つけるカントがインストールされている方法に応じて、

+1

私がまだ聞いたことのない最も近いもの、ありがとう。 – Schwern

+0

まだいくつかの人が私に投票しています。恐らくテストしなかったからです:)喜んで助けてください。 – Lepidosteus

+1

これは私のiphpコンソールで使っています。私のために信頼されています。 – apinstein

2

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

+0

私の質問に記載されている以外の理由はありません。 – Schwern

+0

@schwern:実行ファイルがWebサーバーでphpがライブラリとして使われているだけの場合は、PHPバイナリが使用されていないと、その理由を説明するのはなぜですか?ほとんどの場合、インタフェースはCGIであり、それはperl実行可能ファイルを実行することを意味する(例外があります)ので、Webサーバがperlを使用する方法とは異なります。 私はあなたの最善の策は設定文字列か、それがあなたのニーズに十分に合っているならeval()を使うことです。 – Fredrik

+0

@Schwern:あなたが*/*/usr/bin/php'を削除した場合、WebサーバーはPHPファイルをうまく処理し続けます。私はあなたに、どうしてそれらの間にリンケージの技術的な理由がないのかをはっきりと伝える方法を知らない。 – chaos

0

あるディレクトリを提供します。 phpがapacheモジュールのようなWebサーバーのモジュールとして実行されている場合、呼び出すことのできるバイナリはありません。 php_info()にすべてをリストアップすることができます。 はphpへのパスでもあります。そのパスの中でphpバイナリを仮定することができます。

なぜ追加のプロセスを呼びたいのですか? あなたはincludeコマンドやevalで他のphpファイルを実行できます。 新しいプロセスを生成する理由はありません。

+0

おそらくサーバーを起動したいのですか? – Schwern

+0

+1これは-1の理由がわからないからです。 – Fredrik

-2

について何: <?php exec("which php"); ?>

しかし、それは唯一のUNIX/Linuxのです:D

+1

プログラムを実行したPHPバイナリがパス上のPHPバイナリと同じであるという保証はありません。私の状況では、これは明らかにそうではありません。 – Schwern

1

PHP_BINDIR定数は、おそらく使用するための最も簡単なものです。私は基本的にextension_dir構成の設定からそのBINDIRパスを再作成され思い付く可能性が次善の策:それはより多くのあなたのネイティブperlのように感じているよう

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

それは、その中に正規表現がありますが、そうでありません(!)特に最適ではない。PHP readlink('/proc/self/exe');以前のバージョンの

あなたはphp_binaryという定数を使用することができますPHP5.4で
1

、それはmod_phpのまたは類似経由では動作しませんが、意志を経由して、CGIなど、おそらくそれはないでしょう再び、罰金になりますmod_phpで動作します。

-1

xdebugを設定してインストールするには、自分のmac(OSX El Capitan)上でphp7実行可能ファイルを探していました(正しいバージョンのphpizeを見つけるために必要です)。私が見つけた解決策のどれも私のために働いていないので、私はちょうどそれを探して終了:

find/-name php -print 

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

+0

ありがとうございますが、これは質問に答えません。プログラムは人間のようにリストを解釈することはできません。人間はちょうど正しいもの(何時間もの欲求不満の源)を推測しています。そして、それは "php"という名前のファイルだけを探します。実行されている実際のインタプリタは何でも構いません。 – Schwern

関連する問題