我想从PHP cli中运行PHP cli程序.在一些运行它的机器上,安装了php4和php5.如果我运行外部程序为
php5 outer.php
Run Code Online (Sandbox Code Playgroud)
我希望内部脚本使用相同的php版本运行.在Perl中,我将使用$^Xperl可执行文件.看来PHP中没有这样的变量?
现在,我正在使用$_SERVER['_'],因为bash(和zsh)将环境变量$_设置为最后运行的程序.但是,我宁愿不依赖于特定于shell的习语.
更新:版本差异只是一个问题.例如,如果PHP不在PATH中,或者不是PATH中找到的第一个版本,则查找版本信息的建议将无济于事.
此外,csh变体似乎没有$_为其进程设置环境变量,因此解决方法在那里不适用.
更新2:我正在使用$_SERVER['_'],直到我发现它没有做正确的事情xargs(这是有道理的...... zsh将它设置为它运行的命令,这xargs不是php5,并且xargs不会更改变量).回归使用:
$version = explode('.', phpversion());
$phpcli = "php{$version[0]}";
Run Code Online (Sandbox Code Playgroud)
Kri*_*ves 32
值得注意的是,现在在PHP 5.4+中你可以使用预定义的常量--PHP_BINARY:
PHP_BINARY
指定脚本执行期间的PHP二进制路径.从PHP 5.4开始提供.
小智 8
在我的服务器上我是php 5.3.14.
我找到了一个预定义的常量: PHP_BIN_DIR
然后,假设可执行文件的文件名始终为"php",请$php_cmd = PHP_BIN_DIR.'/php'指向我的PHP可执行文件.
小智 6
更新; 现在也PHP_BINARY可以使用(使用 PHP 7.4 附带的 XAMPP 进行测试)。XAMPP
不幸的是 PHP_BINARY 正在返回httpd二进制文件(在 Windows XAMPP上),所以我又回到使用路径......
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17846 次 |
| 最近记录: |