代码之家  ›  专栏  ›  技术社区  ›  Schwern

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

  •  8
  • Schwern  · 技术社区  · 15 年前

    从一个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 .

    事先谢谢。

    7 回复  |  直到 8 年前
        1
  •  15
  •   Lepidosteus    15 年前

    php_bindir常量提供了php二进制文件所在的目录。

        2
  •  3
  •   chaos    15 年前

    是啊, $_SERVER['_'] 是你所说的,或者尽可能接近现实。当Web服务器二进制文件从Web上运行时,您得到它的原因是 /usr/bin/php 与Web服务器的执行无关;它运行的是一个单独的SAPI。Web PHP实例中没有指向 /urr/bin /php 因为没有理由。

        3
  •  1
  •   Wez Furlong    15 年前

    这个 PHP_BINDIR 常量可能是最容易使用的东西;我能想到的下一个最好的方法就是从 extension_dir 配置设置:

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

    它有一个regex,所以感觉更像是您的本地perl!但除此之外并不是特别理想的。

        4
  •  1
  •   dsas    10 年前

    在php5.4中,可以使用php_二进制常量,它不能通过mod_php或类似的方法工作,而是通过cgi等方法工作。

    对于PHP的早期版本 readlink('/proc/self/exe'); 可能会很好,再次,它不会通过mod_php工作。

        5
  •  0
  •   coding Bott    15 年前

    根据安装PHP的方式,找不到PHP可执行文件。 如果PHP作为Web服务器的模块(如Apache模块)运行,那么就没有可以调用的二进制文件。 您可以查看php_info(),它列出了所有内容。 也可以是PHP的路径。在该路径中,您可以假设一个PHP二进制文件。

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

        6
  •  -1
  •   Witt    8 年前

    我一直在我的Mac上寻找php7可执行文件(osx el capitan),以便配置和安装xdebug(需要找到运行的phpize的正确版本)。我发现的所有解决方案都不适合我,所以我最终找到了:

    find / -name php -print
    

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

        7
  •  -2
  •   ariefbayu    15 年前

    如何: <?php exec("which php"); ?>

    但是,它只是unix/linux:d