12

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

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

更新

  1. 我使用的是 lighttpd + FastCGI,而不是 Apache + mod_php。所以是的,有一个 PHP 二进制文件。
  2. eval/include 不是一个解决方案,因为我正在生成一个服务器,它必须在请求之外继续存在。

我尝试过但不起作用的事情:

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

提前致谢。

4

7 回答 7

16

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

于 2009-08-13T20:05:34.300 回答
3

是的,$_SERVER['_']就是你所说的,或者尽可能接近。从 Web 运行时获得 Web 服务器二进制文件的原因是它/usr/bin/php与 Web 服务器的执行无关;它运行的是一个单独的 SAPI。Web PHP 实例中没有任何东西可以指向,/usr/bin/php因为没有理由存在。

于 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 等工作。

对于早期版本的 PHPreadlink('/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

我一直在我的 mac(OSX El Capitan)上寻找 php7 可执行文件,以便配置和安装 xdebug(需要找到正确的 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 回答