<?php
declare(strict_types=1);
/**************************************************************************************
*
* Catalyst PHP Framework
* PHP Version 8.3 (Required).
*
* @package Catalyst
* @subpackage Public
* @see https://github.com/arcanisgk/catalyst
*
* @author Walter Nuñez (arcanisgk/original founder) <[email protected]>
* @copyright 2023 - 2025
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
*
* @note This program is distributed in the hope that it will be useful
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.
*
* @category Framework
* @filesource
*
* @link https://catalyst.dock Local development URL
*
*/
if (!defined('LOADED_CLASS_CONSTANT')) {
define('LOADED_CLASS_CONSTANT', true);
/**************************************************************************************
* Reads and processes environment variables from a .env file.
*
* This function attempts to load environment variables from a .env file.
* If the .env file does not exist, it tries to copy from a .env.example file.
* It defines constants for each environment variable found in the file.
*
* @return array
* @throws Exception
*/
function readEnvironmentVariable(): array
{
$envPath = implode(DS, [PD, '.env']);
$envArray = [];
try {
if (!file_exists($envPath)) {
$examplePath = implode(DS, [PD, '.env.example']);
if (file_exists($examplePath)) {
if (!copy($examplePath, $envPath)) {
throw new Exception("Unable to copy from example file $envPath");
}
} else {
throw new Exception("File Missing: $examplePath");
}
}
$content = file_get_contents($envPath);
if ($content === false) {
throw new Exception("Unable to read file: $envPath");
}
$lines = explode("\n", $content);
if (empty($lines)) {
throw new Exception(".env file is empty");
}
foreach ($lines as $line) {
if (str_starts_with(trim($line), '#')) {
continue;
}
if (str_contains($line, '=')) {
list($name, $value) = explode('=', $line, 2);
$name = trim($name);
$value = trim($value);
if (strlen($value) > 1 && (
(str_starts_with($value, '"') && str_ends_with($value, '"')) ||
(str_starts_with($value, "'") && str_ends_with($value, "'"))
)) {
$value = substr($value, 1, -1);
}
if (str_contains($value, ',')) {
$value = array_map('trim', explode(',', $value));
}
if (!isset($envArray[$name])) {
$envArray[$name] = $value;
}
}
}
} catch (Exception $e) {
echo $e->getMessage();
// Define ENV as false to indicate failure
if (!defined('ENV')) {
define('ENV', false);
}
// Only exit in CLI mode or if explicitly configured
exit(1);
}
if (!defined('ENV')) {
define('ENV', true);
}
return $envArray;
}
$envArray = [];
try {
$envArray = readEnvironmentVariable();
} catch (Exception $e) {
echo "Environment Error: " . $e->getMessage();
}
if (!defined('IS_DEVELOPMENT')) {
/**
* Defines if the application is running in development mode
*/
define('IS_DEVELOPMENT', isset($envArray['APP_ENV']) && $envArray['APP_ENV'] === 'development');
}
if (!defined('IS_PRODUCTION')) {
/**
* Defines if the application is running in production mode
*/
define('IS_PRODUCTION', isset($envArray['APP_ENV']) && $envArray['APP_ENV'] === 'production');
}
if (!defined('GET_ENVIRONMENT')) {
/**
* The current environment name
*/
define('GET_ENVIRONMENT', $envArray['APP_ENV'] ?? 'unknown');
}
if (!defined('CATALYST_VERSION')) {
/**
* Framework version
*/
define('CATALYST_VERSION', $envArray['APP_VERSION'] ?? 'unknown');
}
if (!defined('CATALYST_KEY')) {
/**
* Application security key
*/
define('CATALYST_KEY', $envArray['APP_KEY'] ?? 'unknown');
}
if (!defined('APP_NAME')) {
/**
* Application name
*/
define('APP_NAME', $envArray['APP_NAME'] ?? 'Catalyst Framework');
}
if (!defined('APP_VERSION')) {
/**
* Application version
*/
define('APP_VERSION', $envArray['APP_VERSION'] ?? '1.0.0');
}
if (!defined('APP_URL')) {
/**
* Application base URL
*/
define('APP_URL', $envArray['APP_URL'] ?? 'https://localhost');
}
if (!defined('LOG_LEVEL')) {
/**
* Log Level - based on environment
*/
define('LOG_LEVEL', defined('IS_DEVELOPMENT') && IS_DEVELOPMENT ? 'DEBUG' : 'ERROR');
}
}
|