Variable EXTENSIONS_FIX_PHPConst
EXTENSIONS_FIX_PHP: "\nif (!function_exists('cfw_extensions_installed')) {\n\t/**\n\t * Marks that the extension functions below are in place.\n\t *\n\t * @return bool\n\t * Always TRUE.\n\t */\n\tfunction cfw_extensions_installed(): bool\n\t{\n\t\treturn true;\n\t}\n\n\t// __CFW_EXTENSION_TABLE__\n\n\t/**\n\t * Tells whether an extension is loaded, counting the gated shims.\n\t *\n\t * @param string $extension\n\t * An extension name, in any case.\n\t *\n\t * @return bool\n\t * TRUE when the extension is built in or a gated shim covers its whole API.\n\t */\n\tfunction extension_loaded($extension): bool\n\t{\n\t\tstatic $seen = [];\n\t\t$key = strtolower((string) $extension);\n\t\tif (isset($GLOBALS['__cfw_ext_shims'][$key])) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!isset($seen[$key])) {\n\t\t\ttry {\n\t\t\t\tnew ReflectionExtension($key);\n\t\t\t\t$seen[$key] = true;\n\t\t\t} catch (ReflectionException $e) {\n\t\t\t\t$seen[$key] = false;\n\t\t\t}\n\t\t}\n\t\treturn $seen[$key];\n\t}\n\n\t/**\n\t * Answers from a catalog of extension names, because the built-in that listed them is gone.\n\t *\n\t * @param bool $zend_extensions\n\t * Whether to list Zend extensions instead.\n\t *\n\t * @return array<int, string>\n\t * The extension names.\n\t */\n\tfunction get_loaded_extensions($zend_extensions = false): array\n\t{\n\t\tif ($zend_extensions) {\n\t\t\ttry {\n\t\t\t\tnew ReflectionZendExtension('Zend OPcache');\n\t\t\t\treturn ['Zend OPcache'];\n\t\t\t} catch (ReflectionException $e) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\t\t$out = [];\n\t\tforeach ($GLOBALS['__cfw_ext_catalog'] as $name) {\n\t\t\tif (extension_loaded($name)) {\n\t\t\t\t$out[] = $name;\n\t\t\t}\n\t\t}\n\t\tforeach ($GLOBALS['__cfw_ext_shims'] as $name => $funcs) {\n\t\t\tif (!in_array($name, array_map('strtolower', $out), true)) {\n\t\t\t\t$out[] = $name;\n\t\t\t}\n\t\t}\n\t\treturn $out;\n\t}\n\n\t/**\n\t * Lists the functions an extension provides, counting the gated shims.\n\t *\n\t * @param string $extension\n\t * An extension name, in any case.\n\t *\n\t * @return array<int, string>|false\n\t * The function names, or FALSE when the extension is unknown or has none.\n\t */\n\tfunction get_extension_funcs($extension)\n\t{\n\t\t$key = strtolower((string) $extension);\n\t\tif (isset($GLOBALS['__cfw_ext_shims'][$key])) {\n\t\t\treturn $GLOBALS['__cfw_ext_shims'][$key];\n\t\t}\n\t\ttry {\n\t\t\t$funcs = array_keys((new ReflectionExtension($key))->getFunctions());\n\t\t} catch (ReflectionException $e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn $funcs === [] ? false : $funcs;\n\t}\n}\n"