首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从脚本中获取当前的PHP可执行文件?

如何从脚本中获取当前的PHP可执行文件?
EN

Stack Overflow用户
提问于 2010-03-03 23:41:20
回答 8查看 21.3K关注 0票数 25

我想从PHP CLI中运行PHP CLI程序。在运行此命令的某些计算机上,同时安装了PHP 4和PHP 5。如果我以如下方式运行外部程序

代码语言:javascript
复制
php5 outer.php

我希望内部脚本与相同的PHP版本运行。在Perl中,我会使用$^X来获取Perl可执行文件。似乎在PHP中没有这样的变量。

现在,我使用$_SERVER['_'],因为Bash (和zsh)将环境变量$_设置为最后运行的程序。但是,我不想依赖特定于shell的习惯用法。

更新:版本差异只是一个问题。例如,如果PHP不在PATH中,或者不是PATH中找到的第一个版本,那么查找版本信息的建议就不会有什么帮助。

此外,csh及其变体似乎没有为它们的进程设置$_环境变量,因此解决方法在这里是不适用的。

更新2:我一直在使用$_SERVER['_'],直到我发现它在xargs下不能做正确的事情(这是有道理的……zsh将其设置为它运行的命令,该命令是xargs,而不是php5,并且xargs不会更改该变量)。我退回到使用:

代码语言:javascript
复制
$version = explode('.', phpversion());
$phpcli = "php{$version[0]}";
EN

回答 8

Stack Overflow用户

发布于 2012-06-21 17:04:23

在我的服务器上安装了PHP 5.3.14。

我找到了一个预定义的常量:PHP_BIN_DIR

然后,假设可执行文件的文件名始终是' PHP ',$php_cmd = PHP_BIN_DIR.'/php'将指向我的PHP可执行文件。

票数 8
EN

Stack Overflow用户

发布于 2015-10-08 00:17:53

代码语言:javascript
复制
    if (defined('PHP_BINARY') &&
                PHP_BINARY &&
                in_array(PHP_SAPI, array('cli', 'cli-server')) &&
                is_file(PHP_BINARY)) {

          return PHP_BINARY;
    } else if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        $paths = explode(PATH_SEPARATOR, getenv('PATH'));
        foreach ($paths as $path) {
            if (substr($path, strlen($path)-1) == DIRECTORY_SEPARATOR) {
                $path = substr($path, 0, strlen($path)-1);
            }
            if (substr($path, strlen($path) - strlen('php')) == 'php') {
                $response = $path.DIRECTORY_SEPARATOR . 'php.exe';
                if (is_file($response)) {
                    return $response;
                }
            } else if (substr($path, strlen($path) - strlen('php.exe')) == 'php.exe') {
                if (is_file($response)) {
                    return $response;
                }
            }
        }
    } else {
        $paths = explode(PATH_SEPARATOR, getenv('PATH'));
        foreach ($paths as $path) {
            if (substr($path, strlen($path)-1) == DIRECTORY_SEPARATOR) {
                $path = substr($path, strlen($path)-1);
            }
            if (substr($path, strlen($path) - strlen('php')) == 'php') {
                if (is_file($path)) {
                    return $path;
                }
                $response = $path.DIRECTORY_SEPARATOR . 'php';
                if (is_file($response)) {
                    return $response;
                }
            }
        }
    }
    return null;
票数 4
EN

Stack Overflow用户

发布于 2010-03-04 03:40:22

好吧,这很难看,但它在Linux上是有效的:

代码语言:javascript
复制
<?php
    // Returns the full path of the current PHP executable
    function get_proc_name(){
       // Gets the PID of the current executable
       $pid = posix_getpid();

       // Returns the exact path to the PHP executable.
       $exe = exec("readlink -f /proc/$pid/exe");
       return $exe;
    }

在Windows上看起来没有什么简单的方法可以做到这一点。一些Windows可执行文件,如tasklist,可以提供可执行文件的名称,但不能提供可执行文件所在位置的完整路径。我只能找到在给定C++AutoHotkey等PID的情况下找到完整路径的示例。如果任何人有任何建议,我可以在其他地方寻找,让我知道。

PS:要在PHP for Windows中获得PID,显然必须调用getmypid()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2372624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档