确定 PHP 文件是否作为 `phar` 存档的一部分运行

问题描述 投票:0回答:3

有没有办法在运行时确定 PHP 文件是否作为

phar
存档的一部分运行?

即,本机实现可能看起来像这样

function isRunningAsPhar()
{
    $first_include = get_included_files()[0];
    return strpos($first_include, '.phar') !== false;
}

但是,如果用户已将 phar 重命名为具有不同的文件扩展名,或者对 phar 进行符号链接以删除文件扩展名,则这可能不起作用。

php phar
3个回答
6
投票

您可以使用函数

Phar::running();
,它为您提供执行的 phar 存档的路径。如果设置了路径,那么它就是一个存档。

https://secure.php.net/manual/en/phar.running.php

手册示例:

<?php
$a = Phar::running(); // $a is "phar:///path/to/my.phar"
$b = Phar::running(false); // $b is "/path/to/my.phar"
?>

5
投票

这是一个不错的小函数,它将根据文件是否在 PHAR Archive 中运行来返回 true 或 false

function isPhar() {
  return Phar::running() !== '';
}

链接:http://lesichkov.co.uk/article/20170928111351676090/handy-php-functions-when-working-with-phar-archives

如何使用示例:

if(isPhar()){
    echo 'Script is running from PHAR';
} else {
    echo 'Script is running otside PHAR';
}

1
投票

你可以直接这样评价:

if (Phar::running()){
    echo "Script is running from a phar";
}

无需创建新的不需要的功能。

© www.soinside.com 2019 - 2024. All rights reserved.