在我们的应用程序中使用 PHP 检查软件包(任何版本)是否已安装/存在的最干净的方法是什么?
基本上,在我们的应用程序中,我们想要调用具有以下签名的函数:
bool function hasComposerPackage(string $packageName)
这个函数必须包含什么,以便我们可以执行以下操作:
if (hasComposerPackage('phpunit/phpunit')) {
echo 'PHPUnit is installed!';
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,这需要在没有任何命令行 exec 调用的情况下发生,并且不应在进程中自动加载任何不必要的文件。
Fat*_*XPC 12
Composer 2(2020 年 10 月)现在支持查找软件包安装状态!https://blog.packagist.com/composer-2-0-is-now-available/
有一个新类 Composer\InstalledVersions,它会在每个项目中自动加载并在运行时可用。它允许您检查您自己的项目运行时存在哪些包/版本。
以下用法示例来自已安装版本 - Runtime Composer 实用程序:
\Composer\InstalledVersions::isInstalled('vendor/package'); // returns bool
Run Code Online (Sandbox Code Playgroud)
@user1132363 使用shell_exec()运行类似的东西composer show是唯一确定的方法(Composer低于2),但你似乎拒绝走这条路。我不知道你为什么拒绝,这就是解决你问题的方法。没有其他可靠的手段。使用class_exists也不可靠,因为包中的类名可能会发生变化。
也就是说,我认为这里有一个更大的问题你没有问:你实际上想解决什么问题?例如,为什么需要检查软件包是否已安装?