从控制台调用时,如何在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/