Optimize require.php (#7286)

Load the auto_loader first
Use config object to find config.conf file and declare global
Use database object and declare global
Use settings object and declare global
This commit is contained in:
frytimo 2025-03-11 17:37:31 -03:00 committed by GitHub
parent d9827f8800
commit da6471df5f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 43 additions and 78 deletions

View File

@ -24,66 +24,35 @@
Mark J Crane <markjcrane@fusionpbx.com>
*/
//find the config.conf file
if (file_exists('/usr/local/etc/fusionpbx/config.conf')) {
$config_file = '/usr/local/etc/fusionpbx/config.conf';
}
elseif (file_exists('/etc/fusionpbx/config.conf')) {
$config_file = '/etc/fusionpbx/config.conf';
}
elseif (file_exists(getenv('SystemDrive') . DIRECTORY_SEPARATOR . 'ProgramData' . DIRECTORY_SEPARATOR . 'fusionpbx' . DIRECTORY_SEPARATOR . 'config.conf')) {
$config_file = getenv('SystemDrive') . DIRECTORY_SEPARATOR . 'ProgramData' . DIRECTORY_SEPARATOR . 'fusionpbx' . DIRECTORY_SEPARATOR . 'config.conf';
}
elseif (file_exists(__DIR__ . '/config.php')) {
//set a custom config_file variable after the config.php has been validated
$file_content = trim(file_get_contents(__DIR__ . '/config.php'));
$pattern = '/^<\?php\s+\$config_file\s+=\s+[\'"](.+?)[\'"];\s+\?>$/';
if (preg_match($pattern, $file_content, $matches) && file_exists($matches[1])) {
$config_file = $matches[1];
}
//class auto loader
if (!class_exists('auto_loader')) {
require_once __DIR__ . "/classes/auto_loader.php";
$autoload = new auto_loader();
}
//load config file
global $config;
$config = config::load();
//config.conf file not found re-direct the request to the install
if (empty($config_file)) {
if ($config->is_empty()) {
header("Location: /core/install/install.php");
exit;
}
//parse the config.conf file
$conf = parse_ini_file($config_file);
//set the include path
set_include_path($conf['document.root']);
//set document root
$_SERVER["DOCUMENT_ROOT"] = substr($conf['document.root'], -1) === '/' ? substr($conf['document.root'], 0, -1) : $conf['document.root'];
//set project path
if (isset($conf['project.path']) && !defined('PROJECT_PATH')) {
if (substr($conf['project.path'], 0, 1) === '/') {
define("PROJECT_PATH", $conf['project.path']);
} else {
if (!empty($conf['project.path'])) {
define("PROJECT_PATH", '/' . $conf['project.path']);
} else {
define("PROJECT_PATH", '');
}
}
}
$_SERVER["PROJECT_PATH"] = PROJECT_PATH;
//set project root using project path
if (!defined('PROJECT_ROOT')) { define("PROJECT_ROOT", $conf['document.root'] . PROJECT_PATH); }
$_SERVER["PROJECT_ROOT"] = PROJECT_ROOT;
//compatibility settings - planned to deprecate
global $conf, $db_type, $db_host, $db_port, $db_name, $db_username, $db_password;
$conf = $config->configuration();
$db_type = $config->get('database.0.type');
$db_host = $config->get('database.0.host');
$db_port = $config->get('database.0.port');
$db_name = $config->get('database.0.name');
$db_username = $config->get('database.0.username');
$db_password = $config->get('database.0.password');
//set the error reporting
ini_set('display_errors', '1');
if (isset($conf['error.reporting'])) {
$error_reporting_scope = $conf['error.reporting'];
}
else {
$error_reporting_scope = 'user';
}
$error_reporting_scope = $config->get('error.reporting', 'user');
switch ($error_reporting_scope) {
case 'user':
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING ^ E_DEPRECATED);
@ -106,37 +75,38 @@
//$db_username = $settings['database']['username'];
//$db_password = $settings['database']['password'];
//get the database connection settings
$db_type = $conf['database.0.type'];
$db_host = $conf['database.0.host'];
$db_port = $conf['database.0.port'];
$db_name = $conf['database.0.name'];
$db_username = $conf['database.0.username'];
$db_password = $conf['database.0.password'];
//debug info
//echo "Include Path: ".get_include_path()."\n";
//echo "Document Root: ".$_SERVER["DOCUMENT_ROOT"]."\n";
//echo "Project Root: ".$_SERVER["PROJECT_ROOT"]."\n";
//class auto loader
if (!class_exists('auto_loader')) {
require_once "resources/classes/auto_loader.php";
$autoload = new auto_loader();
//include global functions
require_once __DIR__ . "/functions.php";
//connect to the database
global $database;
$database = database::new(['config' => $config]);
//if not using the command line required files
global $no_session;
if (!defined('STDIN') && empty($no_session)) {
require_once __DIR__ . '/php.php';
}
//additional includes
if (!defined('STDIN')) {
require_once "resources/php.php";
}
require_once "resources/functions.php";
if (is_array($conf) && count($conf) > 0) {
if (!defined('STDIN')) {
require_once "resources/cidr.php";
}
if (file_exists($_SERVER["DOCUMENT_ROOT"] . PROJECT_PATH . "/resources/switch.php")) {
require_once "resources/switch.php";
//load settings
global $settings;
$settings = new settings(['database' => $database, 'domain_uuid' => $_SESSION['domain_uuid'] ?? '', 'user_uuid' => $_SESSION['domain_uuid'] ?? '']);
//check if the cidr range is valid
global $no_cidr;
if (!defined('STDIN') && empty($no_cidr)) {
require_once __DIR__ . '/cidr.php';
}
//include switch functions when available
if (file_exists(__DIR__ . '/switch.php')) {
require_once __DIR__ . '/switch.php';
}
//change language on the fly - for translate tool (if available)
@ -147,9 +117,6 @@
//change the domain
if (!empty($_GET["domain_uuid"]) && is_uuid($_GET["domain_uuid"]) && $_GET["domain_change"] == "true" && permission_exists('domain_select')) {
//connect to the database
$database = database::new();
//include domains
if (file_exists($_SERVER["PROJECT_ROOT"]."/app/domains/app_config.php") && !permission_exists('domain_all')) {
include_once "app/domains/domains.php";
@ -183,5 +150,3 @@
$domain = new domains();
$domain->set();
}
?>