replace ext-zend-opcache with ext-opcache for spc extension list (#475)

* replace ext-zend-opcache with ext-opcache for spc extension list

* Use constant to set internal and filter extensions

---------

Co-authored-by: Marc Henderkes <m.henderkes@pc-college.de>
Co-authored-by: crazywhalecc <jesse2061@outlook.com>
This commit is contained in:
DubbleClick 2024-06-09 13:38:50 +02:00 committed by GitHub
parent d80406b8e0
commit 2d2607cd7f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 12 deletions

View File

@ -145,19 +145,26 @@ abstract class BaseCommand extends Command
return static::FAILURE; return static::FAILURE;
} }
/**
* Parse extension list from string, replace alias and filter internal extensions.
*
* @param string $ext_list Extension string list, e.g. "mbstring,posix,sockets"
*/
protected function parseExtensionList(string $ext_list): array protected function parseExtensionList(string $ext_list): array
{ {
$a = array_map('trim', explode(',', $ext_list)); // replace alias
return array_values(array_filter($a, function ($x) { $ls = array_map(function ($x) {
$filter_internals = [ $lower = strtolower(trim($x));
'core', if (isset(SPC_EXTENSION_ALIAS[$lower])) {
'hash', logger()->notice("Extension [{$lower}] is an alias of [" . SPC_EXTENSION_ALIAS[$lower] . '], it will be replaced.');
'json', return SPC_EXTENSION_ALIAS[$lower];
'reflection', }
'spl', return $lower;
'standard', }, explode(',', $ext_list));
];
if (in_array(strtolower($x), $filter_internals)) { // filter internals
return array_values(array_filter($ls, function ($x) {
if (in_array($x, SPC_INTERNAL_EXTENSIONS)) {
logger()->warning("Extension [{$x}] is an builtin extension, it will be ignored."); logger()->warning("Extension [{$x}] is an builtin extension, it will be ignored.");
return false; return false;
} }

View File

@ -38,6 +38,23 @@ const DANGER_CMD = [
'rmdir', 'rmdir',
]; ];
// spc internal extensions
const SPC_INTERNAL_EXTENSIONS = [
'core',
'hash',
'json',
'reflection',
'spl',
'standard',
];
// spc extension alias
const SPC_EXTENSION_ALIAS = [
'zend opcache' => 'opcache',
'zend-opcache' => 'opcache',
'zendopcache' => 'opcache',
];
// file replace strategy // file replace strategy
const REPLACE_FILE_STR = 1; const REPLACE_FILE_STR = 1;
const REPLACE_FILE_PREG = 2; const REPLACE_FILE_PREG = 2;

View File

@ -19,7 +19,7 @@ $upx = true;
// If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`). // If you want to test your added extensions and libs, add below (comma separated, example `bcmath,openssl`).
$extensions = match (PHP_OS_FAMILY) { $extensions = match (PHP_OS_FAMILY) {
'Linux', 'Darwin' => 'libxml,xlswriter,openssl,core,hash,json,standard,SPL,HASH,REFLECTION', 'Linux', 'Darwin' => 'libxml,xlswriter,openssl,core,hash,json,standard,SPL,HASH,REFLECTION,zend-opcache',
'Windows' => 'mbstring,pdo_sqlite,mbregex', 'Windows' => 'mbstring,pdo_sqlite,mbregex',
}; };