Files
AtomicOld/api/Config.php
2026-02-14 19:34:54 +03:00

110 lines
4.0 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
}