get('do', 'set'); //支持:set, get, all, del $param_key = $this->get('key', ''); $param_value = $this->get('val', ''); if ($param_do == 'set' && empty($param_value)) { throw new Exception("缺少val参数!", 403); }else if (in_array($param_do, array('set', 'get', 'del')) && empty($param_key)) { throw new Exception("缺少key参数!", 403); } //val数据格式转换 if ($param_value === 'false') { $param_value = false; }else if ($param_value === 'true') { $param_value = true; } $config_file = __DIR__ . "/../../../runtime/custom_config.json"; if (file_exists($config_file)) { $content = file_get_contents($config_file); $configs = @json_decode($content, true); if (empty($configs)) { $config_file_template = __DIR__ . "/../../../conf/custom_config_{$themeName}.json"; $content = file_get_contents($config_file_template); $configs = @json_decode($content, true); } } if (!empty($configs)) { switch($param_do) { case 'set': $configs[$param_key] = $param_value; file_put_contents($config_file, json_encode($configs, JSON_PRETTY_PRINT)); $data = $configs; break; case 'get': $data = !empty($configs[$param_key]) ? $configs[$param_key] : ''; break; case 'del': unset($configs[$param_key]); file_put_contents($config_file, json_encode($configs, JSON_PRETTY_PRINT)); $data = $configs; break; case 'all': default: $data = $configs; break; } } $res = compact('code', 'data'); echo "命令参数:\n"; print_r($this->get()); echo "\n"; echo "命令执行结果:\n"; print_r($res); echo "\n\n"; exit; } //服务器端机器人程序,负责图片、视频文件拍摄时间等信息扫描,并缓存结果供前端使用 public function actionMainBot() { $thisTime = date('Y-m-d H:i:s'); $botLogPrefix = '[MainBot]'; echo "{$botLogPrefix} Main bot started @{$thisTime}\n"; $menus = array(); //菜单,一级目录 $htmlReadme = array(); //Readme.md 内容,底部网站详细介绍 $htmlCateReadme = ''; //当前目录下的Readme.md 内容 $menus_sorted = array(); //Readme_sort.txt 说明文件内容,一级目录菜单从上到下的排序 $this->scanMediaFiles(); //while (true) { //$time = date('Y-m-d H:i:s'); //echo "{$botLogPrefix} {$time}\n"; //sleep(3); //} } protected function scanMediaFiles($dirpath = '') { $rootDir = __DIR__ . '/../../../www/' . FSC::$app['config']['content_directory']; if (empty($dirpath)) { $dirpath = $rootDir; } echo "\n\n== Scanning directory {$dirpath} ...\n\n"; $scanner = new DirScanner(); $scanner->setWebRoot(FSC::$app['config']['content_directory']); $scanner->setRootDir($dirpath); $maxScanDeep = 0; //最大扫描目录级数 $dirTree = $scanner->scan($dirpath, $maxScanDeep); $scanResults = $scanner->getScanResults(); echo 'Total directories or files: ' . count($scanResults); echo "\n\n"; $supportedImageExts = FSC::$app['config']['supportedImageExts']; $supportedVideoExts = FSC::$app['config']['supportedVideoExts']; $supportedAudioExts = FSC::$app['config']['supportedAudioExts']; $cacheKey = 'MainBotScanedDirs'; if (!empty($scanResults)) { foreach ($scanResults as $id => $item) { $hadScanedDirs = Common::getCache($cacheKey); if ( !empty($item['filename']) && empty($item['original_ctime']) && in_array($item['extension'], $supportedImageExts) && !in_array($item['extension'], $scanner->exifSupportFileExtensions) ) { echo "Image file no original_ctime: {$item['filename']}.{$item['extension']}, {$item['realpath']}\n"; }else if ( !empty($item['filename']) && empty($item['original_ctime']) && (in_array($item['extension'], $supportedVideoExts) || in_array($item['extension'], $supportedAudioExts)) ) { echo "Video or audio file no original_ctime: {$item['filename']}.{$item['extension']}, {$item['realpath']}\n"; }else if (!empty($item['directory']) && empty($hadScanedDirs[$id])) { //if it's directory $hadScanedDirs[$id] = true; Common::setCache($cacheKey, $hadScanedDirs); sleep(1); $this->scanMediaFiles($item['realpath']); } } } } }