SIMON Master Console Rebuild
True command center for SIMON + WEB360
This rebuild gives you a cleaner production spine: interactive tree, live viewer, guarded editor, dynamic graphics, architecture map, and note storage. It is designed to sit beside your existing
console.php
and become the stronger replacement path.
Dashboard
Tree
Viewer
System Map
File Registry
Notes
Files
15,282
Folders
406
Scanned Size
3.84 GB
PHP Files
876
Editable Text Files
12,545
File viewer
guarded to /htdocs
/live/system_check.php
<?php declare(strict_types=1);require __DIR__.'/bootstrap.php'; function check(string $name,bool $ok,string $detail,string $fix=''):array{return compact('name','ok','detail','fix');} $checks=[];$checks[]=check('PHP version',version_compare(PHP_VERSION,'8.1','>='),PHP_VERSION,'Use PHP 8.1 or newer.'); foreach(['curl','json','simplexml','mbstring','openssl'] as $ext)$checks[]=check('Extension: '.$ext,extension_loaded($ext),extension_loaded($ext)?'loaded':'missing','Enable the '.$ext.' PHP extension in hosting settings.'); foreach([SIMON_CACHE_DIR,SIMON_LOG_DIR,SIMON_DATA_DIR,SIMON_BACKUP_DIR] as $dir)$checks[]=check('Writable: '.basename($dir),is_dir($dir)&&is_writable($dir),$dir,(is_dir($dir)?'Set folder permissions to 775.':'Create folder and set permissions to 775.')); $required=['bootstrap.php','feeds.json','feed_proxy.php','feed_manager.php','providers/rss.php','providers/geojson.php','providers/weather.php','providers/hn.php','providers/social.php','providers/webhook.php'];foreach($required as $f)$checks[]=check('File: '.$f,is_file(SIMON_ROOT.'/'.$f),is_file(SIMON_ROOT.'/'.$f)?'present':'missing','Upload the missing file from the package.'); $raw=is_file(SIMON_FEEDS_FILE)?file_get_contents(SIMON_FEEDS_FILE):'';$feeds=json_decode((string)$raw,true);$valid=is_array($feeds);$checks[]=check('feeds.json valid',$valid,$valid?count($feeds).' entries':json_last_error_msg(),'Restore a feeds backup or upload a valid feeds.json.'); $ids=[];$dupes=[];$missing=[];if($valid){foreach($feeds as $f){if(!is_array($f))continue;$id=(string)($f['id']??'');if(isset($ids[$id]))$dupes[]=$id;$ids[$id]=1;$e=(string)($f['engine']??'');if($e&&!is_file(SIMON_ROOT.'/providers/'.$e.'.php'))$missing[$e]=1;}} $checks[]=check('Unique feed IDs',!$dupes,$dupes?'Duplicates: '.implode(', ',$dupes):'No duplicates','Rename duplicate IDs in Feed Manager.');$checks[]=check('Provider coverage',!$missing,$missing?'Missing: '.implode(', ',array_keys($missing)):'All engines have provider files','Upload missing providers or disable those feeds.'); $testKey='system_check_'.bin2hex(random_bytes(3)).'.json';simon_cache_set($testKey,['ok'=>true]);$cacheOk=simon_cache_get($testKey,60)!==null;@unlink(SIMON_CACHE_DIR.'/'.$testKey);$checks[]=check('Cache read/write',$cacheOk,$cacheOk?'passed':'failed','Verify cache permissions and available disk space.'); $overall=!array_filter($checks,fn($c)=>!$c['ok']);$json=isset($_GET['format'])&&$_GET['format']==='json';if($json)simon_json_response(['ok'=>$overall,'version'=>SIMON_FEED_VERSION,'root'=>SIMON_ROOT,'checks'=>$checks]); ?><!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SIMON System Check</title><style>body{margin:0;background:#05041a;color:#eef5ff;font:14px/1.5 system-ui}.w{max-width:1050px;margin:auto;padding:24px}.top{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.top h1{margin:0}.badge{padding:7px 12px;border-radius:999px;background:<?=$overall?'#7cff9e':'#ff6b8f'?>;color:#05041a;font-weight:900}.grid{display:grid;gap:10px;margin-top:20px}.c{display:grid;grid-template-columns:34px 1fr;gap:12px;padding:14px;border:1px solid rgba(75,227,255,.22);background:#11102f;border-radius:15px}.ic{font-size:22px}.ok{color:#7cff9e}.bad{color:#ff6b8f}.muted{color:#9ba7c8}.fix{color:#ffb347;margin-top:5px}.btn{display:inline-block;color:#eef5ff;text-decoration:none;border:1px solid rgba(75,227,255,.3);padding:9px 13px;border-radius:999px;margin:4px}.actions{margin-left:auto}</style></head><body><div class="w"><div class="top"><div><h1>SIMON System Check</h1><div class="muted">Version <?=htmlspecialchars(SIMON_FEED_VERSION)?> · <?=htmlspecialchars(SIMON_ROOT)?></div></div><span class="badge"><?=$overall?'ALL CORE CHECKS PASS':'ACTION REQUIRED'?></span><div class="actions"><a class="btn" href="index.php">Dashboard</a><a class="btn" href="troubleshoot.php">Troubleshoot</a><a class="btn" href="?format=json" target="_blank">JSON</a></div></div><div class="grid"><?php foreach($checks as $c):?><div class="c"><div class="ic"><?=$c['ok']?'✅':'❌'?></div><div><b class="<?=$c['ok']?'ok':'bad'?>"><?=htmlspecialchars($c['name'])?></b><div class="muted"><?=htmlspecialchars($c['detail'])?></div><?php if(!$c['ok']&&$c['fix']):?><div class="fix">Fix: <?=htmlspecialchars($c['fix'])?></div><?php endif?></div></div><?php endforeach?></div></div></body></html>
Save file
Quick jump
open a path
Open