61 lines
1.8 KiB
PHP
61 lines
1.8 KiB
PHP
<?php
|
|||
|
|
/**
|
||
|
|
* 简航 SimpleNav —— 基础配置
|
||
|
|
* 面向个人的轻量级网站导航系统
|
||
|
|
*/
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
date_default_timezone_set('Asia/Shanghai');
|
||
|
|
if (function_exists('mb_internal_encoding')) {
|
||
|
|
mb_internal_encoding('UTF-8');
|
||
|
|
}
|
||
|
|
|
||
|
|
define('APP_NAME', '简航');
|
||
|
|
define('APP_PATH', __DIR__);
|
||
|
|
define('DATA_PATH', APP_PATH . '/data'); // 数据库等敏感数据(禁止 Web 访问)
|
||
|
|
define('DB_PATH', DATA_PATH . '/nav.db');
|
||
|
|
define('ICON_PATH', APP_PATH . '/uploads/icons'); // 抓取的网站图标(可公开访问)
|
||
|
|
define('ICON_URL', 'uploads/icons'); // 相对站点根
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 自动探测应用根 URL,兼容「放在子目录 /simplenav」与「放在根目录」两种部署。
|
||
|
|
* 返回形如 ''(根目录)或 '/simplenav'。
|
||
|
|
*/
|
||
|
|
function app_base(): string
|
||
|
|
{
|
||
|
|
$dir = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : '/';
|
||
|
|
$dir = str_replace('\\', '/', dirname($dir));
|
||
|
|
$dir = preg_replace('#/admin$#', '', $dir); // admin/ 下的脚本回退到应用根
|
||
|
|
$dir = rtrim($dir, '/');
|
||
|
|
return $dir === '/' ? '' : $dir;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 生成带应用根的 URL */
|
||
|
|
function url(string $path = ''): string
|
||
|
|
{
|
||
|
|
return app_base() . '/' . ltrim($path, '/');
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 站点名(可在后台设置里覆盖) */
|
||
|
|
function site_name(): string
|
||
|
|
{
|
||
|
|
return setting('site_name', APP_NAME);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 读取设置项 */
|
||
|
|
function setting(string $key, string $default = ''): string
|
||
|
|
{
|
||
|
|
static $cache = null;
|
||
|
|
if ($cache === null) {
|
||
|
|
$cache = [];
|
||
|
|
try {
|
||
|
|
foreach (db()->query('SELECT k, v FROM settings') as $row) {
|
||
|
|
$cache[$row['k']] = $row['v'];
|
||
|
|
}
|
||
|
|
} catch (Throwable $e) {
|
||
|
|
$cache = [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return array_key_exists($key, $cache) && $cache[$key] !== '' ? $cache[$key] : $default;
|
||
|
|
}
|