从控制台调用时,如何在Phar归档文件的PHP脚本中getcwd()

考虑一下这个调用:

/path/to/my/actual/cwd> php index.php

在这种情况下,getcwd()将返回/path/to/my/actual/cwd。现在,我们使用相同的脚本,将其放入Phar中,并按如下方式调用它:
/path/to/my/actual/cwd> php /path/to/my/phar/archive.phar

这次,getcwd()将返回/path/to/my/phar,因为它是Phar归档文件的当前工作目录,但是我没有从该目录调用归档文件,控制台的cwd有所不同。

我该怎么办?

甚至更好的是,如何强制Phar中的所有脚本将其cwd视为控制台之一?

最佳答案

这个问题很旧,但是我会尽力回答...
假设我们有以下针对Phar软件包的构建器脚本
(通过CLI从php -dphar.readonly=0 build.php调用):

<?php
$phar = new Phar('bundle.phar');
$phar->startBuffering();
$phar->addFile('index.php');
$phar->setStub('<?php var_dump(["cwd" => getcwd(), "dir" => __DIR__]);
__HALT_COMPILER();');
$phar->stopBuffering();
目录结构如下所示:
app
├── other
└── phar
    ├── build.php
    └── bundle.phar
/app/other目录中并调用Phar捆绑包实际上在PHP 7.4中显示以下内容:
cd /app/other
php /app/phar/bundle.phar

array(2) {
  ["cwd"]=>
  string(31) "/app/other"
  ["dir"]=>
  string(30) "/app/phar"
}
因此,Phar stub 是处理(或保留)类似于getcwd()的上下文的地方。

关于php - 如何在Phar中获取当前的工作目录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35487003/

10-09 21:48