gpt4 book ai didi

php - 在不使用命令行的情况下获取 PHP 中 Composer 包的版本

转载 作者:可可西里 更新时间:2023-11-01 13:24:18 25 4
gpt4 key购买 nike

有没有一种方法可以在不调用 composer show -i 或任何类似方法的情况下获取与 Composer 安装的包的版本,并且该包当前由应用程序使用?

我想确定应用程序当前使用的版本,并在某些包需要更新时显示警报,并最终自动更新。

最佳答案

对于当前的任务,我认为合适的解决方案如下。

Composer 在 vendor/composer 下创建一个 installed.json 文件,其中包含有关已安装包的所有定义信息。

该文件看起来与此类似。

[
{
"name": "vendor_X/package_Y",
"version": "1.0.0",
"version_normalized": "1.1.0.0",
"source": {},
"dist": {},
"require": {},
"require-dev": {},
other data about the package
},
{"..other package's data..": ""},
{"...": ""}
]

一个简单的解决方案是使用以下代码。

$data = array();
$packages = json_decode(file_get_contents('../vendor/composer/installed.json'));
// Assuming that the project root is one level above the web root.
foreach ($packages as $package) {
$data[$package['name']] = $package['version'];
}

// Make a cURL request to packagist.org to get the package data
// https://packagist.org/packages/vendor_X/package_Y.json
// The output is something like the following
/*
{
"package": {
"name": "omnipay/dummy",
"versions": {
"dev-master": {},
"v1.1.0": {},
"v1.0.0": {}
},
"type": "library",
}
}
*/

$packagist = json_decode($packagist_reponse_as_json);
if (strcmp($data['vendor_X/package_Y'], $packagist['package']['versions'][1]) < 0) {
// Fire a composer update, send email alert, show notification, or call the president.
}

上面的解决方案是最简单的,也有点难看,但它显示了关键点,即从哪里获取包的本地版本以及如何从 Composer 获取包版本。
一个更实用的解决方案应该使用缓存,而不应该在正常的应用程序操作期间进行;更好的解决方案是使用 cron 作业。

关于php - 在不使用命令行的情况下获取 PHP 中 Composer 包的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com