配置MY Navigation'); } }else{ // 设置配置文件版本 define('NAV_CONF_VERSION_CURRENT', $GLOBALS['config']['CONF_VERSION'] ?? 0); // 配置文件版本过低 if (NAV_CONF_VERSION_CURRENT < NAV_CONF_VERSION_OLDEST) { exit('当前配置文件(.own_conf)版本不满足当前程序要求的最低版本,可以使用 php '. __DIR__ . 'dc 下载默认配置(会覆盖原有配置)'); } } // 命令行模式 if (IS_CLI) { $method = $argv[1] ?? null; define('METHOD', $method); if (METHOD == null || METHOD == 'help') { echo 'php '.basename(__FILE__).' [COMMAND]'.PHP_EOL; echo ' dc download default configuration file for navigation'.PHP_EOL; echo ' dces download default configuration file for each subfolder of navigation'.PHP_EOL; echo PHP_EOL; echo 'GitHub https://github.com/jokin1999/my-navigation'; } // download config if (METHOD == 'dc') { // 检查文件是否可写 if (!is_writable('./')) { exit('目录'. __DIR__ .'无法写入文件'); } echo '正在获取默认配置文件...' . PHP_EOL; $own_conf = getOnlineFile('.own_conf.example'); if ($own_conf) { file_put_contents('./.own_conf', $own_conf); echo '文件写入完成,编辑'. __DIR__. '/.own_conf 文件以自定义配置'; }else{ exit('获取默认配置文件失败,请稍候再试...'); } } // download config of each subfolder if (METHOD == 'dces') { // 检查文件是否可写 if (!is_writable('./')) { exit('目录'. __DIR__ .'无法写入文件'); } echo '正在获取默认配置文件...' . PHP_EOL; $own_conf = getOnlineFile('.own_navi.example'); if ($own_conf) { file_put_contents('./.own_navi.example', $own_conf); echo '文件写入完成!'.PHP_EOL.'复制'. __DIR__. '/.own_navi.example 至子目录中并命名为 .own_navi 以自定义配置'; }else{ exit('获取默认配置文件失败,请稍候再试...'); } } }else{ define('METHOD', NULL); } // 获取合法目录 $dirs = getDirs(); // 读取配置 if (c('NAV_TRY_READ_CONF') == 1) { $dirs = getConf($dirs); } // 清理导航列表 foreach ($dirs as $group => $dir) { if (count($dirs[$group]) <= 0) { unset($dirs[$group]); } } /** * 获取文件 * @param string $filename * @param bool $use_cdn * @param bool $try_again * @return string|bool */ function getOnlineFile(string $filename, bool $use_cdn = true, bool $try_again = true) { $url = ($use_cdn === true ? URL_NAV_OL_CDN : URL_NAV_OL) . $filename; echo '文件获取地址:'. $url . PHP_EOL; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); $res = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($res && $httpCode == 200) { echo '获取文件成功!' . PHP_EOL; return $res; }else{ // 不使用cdn再次尝试 if ($try_again === true) { echo '获取失败,使用原地址再次尝试...' . PHP_EOL; return getOnlineFile($filename, false, false); }else{ return false; } } } /** * 读取目录配置 * @param array $dirs * @return array */ function getConf(array $dirs) : array { foreach ($dirs as $group => $g_dirs) { foreach ($g_dirs as $dir => $value) { $path = './' . $dir . '/.own_navi'; if (is_file($path)) { $confs = parse_ini_file($path); if (c('NAV_ALLOW_GROUP') != 1){ $cur_group = c('NAV_DEFAULT_GROUP', '默认分组'); }else{ $cur_group = $confs['GROUP'] ?? c('NAV_DEFAULT_GROUP', '默认分组'); } if ($confs) { // 如果不是默认分组从默认分组删除 if (isset($dirs[c('NAV_DEFAULT_GROUP', '默认分组')][$dir]) && $cur_group != c('NAV_DEFAULT_GROUP', '默认分组')) { unset($dirs[c('NAV_DEFAULT_GROUP', '默认分组')][$dir]); } foreach ($confs as $key => $value) { if ($key === 'TITLE' && $value === '') { $value = $dir; } $dirs[$cur_group][$dir][strtolower($key)] = $value; } } }else{ continue; } } } return $dirs; } /** * 获取目录 * @param void * @return array */ function getDirs() : array { $_dirs = scandir('./'); $dirs = []; foreach ($_dirs as $dir) { // 忽略.开头的文件夹 if ($dir == '.' || $dir == '..' || substr($dir, 0, 1) == '.') { continue; } if (is_dir('./' . $dir)) { $dirs[c('NAV_DEFAULT_GROUP', '默认分组')][$dir]['title'] = $dir; } } return $dirs; } /** * 获取设置项 * @param string key * @param mixed default * @return mixed */ function c(string $key, $default = false) { if (isset($GLOBALS['config'][$key])) { return $GLOBALS['config'][$key]; }else{ return defined($key) ? constant($key) : $default; } } /** * 输出设置项 * @param string $key * @return void */ function ec(string $key) { echo c($key); } ?> <?php ec('NAV_NAME'); ?>

$g_dirs) : ?>
暂无其他目录呢~ $value): ?>

Powered by Jokin