从PHP程序内部我想知道执行它的二进制文件的位置。为此,Perl有$^X
。 PHP中是否有等价物?
这样它可以使用自己执行子PHP进程(而不是硬编码路径或假设“php”是正确的。)
更新
我尝试过但不起作用的事情:
$_SERVER['_']
看起来像我想要的命令行,但它实际上来自上一个执行程序的shell设置的环境变量。从Web服务器运行时,这是Web服务器二进制文件。which php
将无效,因为不保证PHP二进制文件与Web服务器PATH
中的二进制文件相同。提前致谢。
答案 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