如何找到当前运行的PHP可执行文件?

时间:2009-08-13 19:58:22

标签: php fastcgi

从PHP程序内部我想知道执行它的二进制文件的位置。为此,Perl有$^X。 PHP中是否有等价物?

这样它可以使用自己执行子PHP进程(而不是硬编码路径或假设“php”是正确的。)

更新

  1. 我使用的是lighttpd + FastCGI,而不是Apache + mod_php。所以是的,有一个PHP二进制文件。
  2. eval / include不是解决方案,因为我正在生成一个必须在请求之外生存的服务器。
  3. 我尝试过但不起作用的事情:

    • $_SERVER['_']看起来像我想要的命令行,但它实际上来自上一个执行程序的shell设置的环境变量。从Web服务器运行时,这是Web服务器二进制文件。
    • which php将无效,因为不保证PHP二进制文件与Web服务器PATH中的二进制文件相同。

    提前致谢。

7 个答案:

答案 0 :(得分:16)

PHP_BINDIR常量为您提供php二进制文件所在的目录

答案 1 :(得分:3)

是的,$_SERVER['_']正是你所谈论的,或者就像存在一样。从Web运行时获取Web服务器二进制文件的原因是/usr/bin/php与Web服务器的执行无关;它正在运行的是一个单独的SAPI。 Web PHP实例中没有任何内容指向/usr/bin/php,因为没有理由这样做。

答案 2 :(得分:1)

PHP_BINDIR常数可能是最容易使用的东西;我能想到的下一个最好的事情是基本上从extension_dir配置设置重新创建bindir路径:

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

它有一个正则表达式,所以它感觉更像你的本地perl(!),但在其他方面并不是特别优化。

答案 3 :(得分:1)

在PHP5.4中你可以使用PHP_BINARY常量,它不会通过mod_php或类似工作,但会通过CGI等。

对于早期版本的PHP readlink('/proc/self/exe');可能会没问题,再次通过mod_php无法工作。

答案 4 :(得分:0)

根据php的安装方式,你可以找到php可执行文件。 如果php作为web服务器的模块运行,如apache模块,则没有可以调用的二进制文件。 你可以看看php_info()它列出了一切。 也可能是php的路径。在那条路径中你可以假设一个php二进制文件。

但为什么要调用额外的流程呢? 你可以通过include命令或eval执行其他php文件。 没有理由产生新的过程。

答案 5 :(得分:-1)

我一直在寻找我的mac(OSX El Capitan)上的php7可执行文件,以配置和安装xdebug(需要找到正确版本的phpize才能运行)。我找到的所有解决方案都没有为我工作,所以我结束了搜索它:

find / -name php -print

我知道(来自phpinfo())我运行的是php7,所以我能够从find提供的选项中推断出正确的目录。

答案 6 :(得分:-2)

怎么样: <?php exec("which php"); ?>

但是,它只是unix / linux:D