Files
AtomicOld/api/Config.php

110 lines
4.0 KiB
PHP
Raw Normal View History

2026-02-14 19:34:54 +03:00
<?php
/**
* Класс-обертка для конфигурационного файла с настройками магазина
* В отличие от класса Settings, Config оперирует низкоуровневыми настройками, например найстройками базы данных.
*
*
* @copyright 2013 Denis Pikusov
* @link http://simplacms.ru
* @author Denis Pikusov
*
*/
require_once('Simpla.php');
class Config
{
public $version = '2.2.4';
// Файл для хранения настроек
public $config_file = 'config/config.php';
private $vars = array();
// В конструкторе записываем настройки файла в переменные этого класса
// для удобного доступа к ним. Например: $simpla->config->db_user
public function __construct()
{
// Читаем настройки из дефолтного файла
$ini = parse_ini_file($_SERVER['DOCUMENT_ROOT'] . '/' . $this->config_file);
// Записываем настройку как переменную класса
foreach($ini as $var=>$value)
$this->vars[$var] = $value;
// Вычисляем DOCUMENT_ROOT вручную, так как иногда в нем находится что-то левое
$localpath=getenv("SCRIPT_NAME");
$absolutepath=getenv("SCRIPT_FILENAME");
$_SERVER['DOCUMENT_ROOT']=substr($absolutepath,0,strpos($absolutepath,$localpath));
// Адрес сайта - тоже одна из настроек, но вычисляем его автоматически, а не берем из файла
$script_dir1 = realpath(dirname(dirname(__FILE__)));
$script_dir2 = realpath($_SERVER['DOCUMENT_ROOT']);
$subdir = trim(substr($script_dir1, strlen($script_dir2)), "/\\");
// Протокол
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'? 'https' : 'http';
if($_SERVER["SERVER_PORT"] == 443)
$protocol = 'https';
$this->vars['protocol'] = $protocol;
$this->vars['root_url'] = $protocol.'://'.rtrim($_SERVER['HTTP_HOST']);
if(!empty($subdir))
$this->vars['root_url'] .= '/'.$subdir;
// Подпапка в которую установлена симпла относительно корня веб-сервера
$this->vars['subfolder'] = $subdir.'/';
// Определяем корневую директорию сайта
$this->vars['root_dir'] = dirname(dirname(__FILE__)).'/';
// Максимальный размер загружаемых файлов
$max_upload = (int)(ini_get('upload_max_filesize'));
$max_post = (int)(ini_get('post_max_size'));
$memory_limit = (int)(ini_get('memory_limit'));
$this->vars['max_upload_filesize'] = min($max_upload, $max_post, $memory_limit)*1024*1024;
// Соль (разная для каждой копии сайта, изменяющаяся при изменении config-файла)
$s = stat($_SERVER['DOCUMENT_ROOT'] . '/' . $this->config_file);
$this->vars['salt'] = md5(md5_file($_SERVER['DOCUMENT_ROOT'] . '/' . $this->config_file).$s['dev'].$s['ino'].$s['uid'].$s['mtime']);
//echo '<!--'; var_dump($this->vars); echo '-->';
}
// Магическим методов возвращаем нужную переменную
public function __get($name)
{
if(isset($this->vars[$name]))
return $this->vars[$name];
else
return null;
}
// Магическим методов задаём нужную переменную
public function __set($name, $value)
{
# Запишем конфиги
if(isset($this->vars[$name]))
{
$conf = file_get_contents($this->config_file);
$conf = preg_replace("/".$name."\s*=.*\n/i", $name.' = '.$value."\r\n", $conf);
$cf = fopen($this->config_file, 'w');
fwrite($cf, $conf);
fclose($cf);
$this->vars[$name] = $value;
}
}
public function token($text)
{
return md5($text.$this->salt);
}
public function check_token($text, $token)
{
if(!empty($token) && $token === $this->token($text))
return true;
return false;
}
}