mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-17 20:34:51 +08:00
Add php-src mirror and use gmp mirror site (#1048)
This commit is contained in:
parent
8a51d64685
commit
8c4e3d58a3
@ -361,7 +361,7 @@
|
|||||||
},
|
},
|
||||||
"gmp": {
|
"gmp": {
|
||||||
"type": "filelist",
|
"type": "filelist",
|
||||||
"url": "https://gmplib.org/download/gmp/",
|
"url": "https://ftp.gnu.org/gnu/gmp/",
|
||||||
"regex": "/href=\"(?<file>gmp-(?<version>[^\"]+)\\.tar\\.xz)\"/",
|
"regex": "/href=\"(?<file>gmp-(?<version>[^\"]+)\\.tar\\.xz)\"/",
|
||||||
"provide-pre-built": true,
|
"provide-pre-built": true,
|
||||||
"alt": {
|
"alt": {
|
||||||
|
|||||||
@ -6,11 +6,17 @@ namespace SPC\store\source;
|
|||||||
|
|
||||||
use JetBrains\PhpStorm\ArrayShape;
|
use JetBrains\PhpStorm\ArrayShape;
|
||||||
use SPC\exception\DownloaderException;
|
use SPC\exception\DownloaderException;
|
||||||
|
use SPC\exception\SPCException;
|
||||||
use SPC\store\Downloader;
|
use SPC\store\Downloader;
|
||||||
|
|
||||||
class PhpSource extends CustomSourceBase
|
class PhpSource extends CustomSourceBase
|
||||||
{
|
{
|
||||||
public const NAME = 'php-src';
|
public const string NAME = 'php-src';
|
||||||
|
|
||||||
|
public const array WEB_PHP_DOMAINS = [
|
||||||
|
'https://www.php.net',
|
||||||
|
'https://phpmirror.static-php.dev',
|
||||||
|
];
|
||||||
|
|
||||||
public function fetch(bool $force = false, ?array $config = null, int $lock_as = SPC_DOWNLOAD_SOURCE): void
|
public function fetch(bool $force = false, ?array $config = null, int $lock_as = SPC_DOWNLOAD_SOURCE): void
|
||||||
{
|
{
|
||||||
@ -28,21 +34,26 @@ class PhpSource extends CustomSourceBase
|
|||||||
#[ArrayShape(['type' => 'string', 'path' => 'string', 'rev' => 'string', 'url' => 'string'])]
|
#[ArrayShape(['type' => 'string', 'path' => 'string', 'rev' => 'string', 'url' => 'string'])]
|
||||||
public function getLatestPHPInfo(string $major_version): array
|
public function getLatestPHPInfo(string $major_version): array
|
||||||
{
|
{
|
||||||
// 查找最新的小版本号
|
foreach (self::WEB_PHP_DOMAINS as $domain) {
|
||||||
|
try {
|
||||||
$info = json_decode(Downloader::curlExec(
|
$info = json_decode(Downloader::curlExec(
|
||||||
url: "https://www.php.net/releases/index.php?json&version={$major_version}",
|
url: "{$domain}/releases/index.php?json&version={$major_version}",
|
||||||
retries: (int) getenv('SPC_DOWNLOAD_RETRIES') ?: 0
|
retries: (int) getenv('SPC_DOWNLOAD_RETRIES') ?: 0
|
||||||
), true);
|
), true);
|
||||||
if (!isset($info['version'])) {
|
if (!isset($info['version'])) {
|
||||||
throw new DownloaderException("Version {$major_version} not found.");
|
throw new DownloaderException("Version {$major_version} not found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$version = $info['version'];
|
$version = $info['version'];
|
||||||
|
|
||||||
// 从官网直接下载
|
|
||||||
return [
|
return [
|
||||||
'type' => 'url',
|
'type' => 'url',
|
||||||
'url' => "https://www.php.net/distributions/php-{$version}.tar.xz",
|
'url' => "{$domain}/distributions/php-{$version}.tar.xz",
|
||||||
];
|
];
|
||||||
|
} catch (SPCException) {
|
||||||
|
logger()->warning('Failed to fetch latest PHP version for major version {$major_version} from {$domain}, trying next mirror if available.');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// exception if all mirrors failed
|
||||||
|
throw new DownloaderException("Failed to fetch latest PHP version for major version {$major_version} from all tried mirrors.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user