web-dev-qa-db-ja.com

シェルアクセスなしでphpインタープリター/バイナリへのフルパスを取得する方法

Phpスクリプトからphpインタープリターへのフルパスを取得するにはどうすればよいですか(コマンドラインアクセスなし)。

私がする必要があるのは:

$foo = "/usr/bin/php";
echo $foo;

ただし、最初にパスを取得して、fooに割り当てる必要があります。

Windowsとnixの両方でさらにうまく機能するソリューションがある場合でも、そうでない場合は、nixで問題ありません。

あなたが尋ねる前に、

  1. ホストに尋ねることは問題外です
  2. シェルアクセスなし

問題は、出力されたものを使用しても機能しないことです。たとえば、PHP_BINDIRは/ usr/binを出力しますが、/ usr/bin/phpを使用しても役に立ちません。完全なコードは次のとおりです。

exec("php-cli $path_to_file > /dev/null 2>/dev/null &"); 

ただし、/ usr/bin/php-cliを使用しても、そのように表示されても機能しません。私は使用する必要があります:

exec("/opt/php52/bin/php-cli $path_to_file > /dev/null 2>/dev/null &");

たとえば、この特定のホストの場合。

14
Chris81

この定数でPHPバイナリパスを見つけることができます:

PHP_BINDIR

PHP 5.4の時点で、現在この定数で実際に実行されている実行可能ファイルへのパスを取得できます。

PHP_BINARY

http://php.net/manual/en/reserved.constants.php

29
Brad

Linuxユーザーは、whereisコマンドを試すことができます。

私はPHP IDEでこの状況になりました。

whereis php
5
parera riddle

Windowsでは、次のスニペットをお勧めします。

<?php
$pid = getmypid();
$output = Shell_exec(sprintf('tasklist /nh /fo csv /fi "PID eq %d"', $pid));
$processInfo = explode(',', $output);
echo PHP_BINDIR . DIRECTORY_SEPARATOR . trim($processInfo[0], '"');

UNIXでは、シェルコマンドはおそらくpsを利用する必要があります

3
user725408

ホストがユーザーにrootアクセスを与えることは一般的ではありません。おそらく、/ var/wwwの下には何もアクセスできません

0
Pablo Mescher