Installation
manager.php til din server — hvor som helst inde i din web-rodcomposer install. Ingen npm. Ingen database. Ingen .htaccess-aendringer kraevet. Konfiguration gemt automatisk i writable/.manager_config.Foerste Koring — Setup-guide
Ved foerste opstart viser manageren en komplet setup-guide med en cinematisk moerk baggrund — animeret SVG med stjerner, konstellationslinjer, tre roterende geometriske ringe og de personlige brandnavne TYRUS og ANGEL lysende pa hver side.
- Minimum 8 tegn
- Live adgangskodestyrke-maler med 7 scoringskriterier
- Live adgangskode-match-indikator mellem begge felter
- Knap “Foreslag staerk adgangskode” — genererer automatisk en sikker adgangskode
- Vis/skjul-skifte pa begge felter
- Fuld URL — brugt af Forhandsvisnings-knappen og cacherydning
- Inline URL-validering
- Logo-tip: skriv hvert ord i dit domane med stort bogstav for multi-farvet logo-effekt
- Forudindstillede knapper: 10 / 20 / 50 / 100 / 200 GB (desktop), 3-kolonne gitter (mobil)
- Brugerdefineret GB-input med spinner-knapper ▲▼
- Live byte-konverteringsvisning
requestAnimationFrame-loop.Login & Sikkerhed
- Adgangskode bekraeftet mod bcrypt-hash i
writable/.manager_config - Brute-force beskyttelse — IP sporet i
writable/.login_attempts - Forsøg 1: “Noget virker ikke rigtigt her.”
- Forsøg 2: “Interessant... fortsaetter du?”
- Forsøg 3: IP permanent bandlyst — “Vi ses i et andet liv.” — skrevet til
writable/.blocked_ips - Session timeout — 30 minutters inaktivitet → automatisk omdirigering til login
- Advarselsbar vises 2 minutter foer udloeb med live nedtaelling
- Knappen “Forlaeng” nulstiller bade JS-timer og PHP-session samtidigt
- Aktivitetshændelser (mousemove, keydown, click, scroll) nulstiller inaktivitetstælleren
- Alle handlinger logget med tidsstempel til
writable/.activity_log— IP-adresse logget kun for LOGIN og LOGOUT
IP-blokeringsskarm
Naar en IP er bandlyst, vises i stedet for en normal fejlside en fuldskærms animeret canvas-oplevelse:
- Menneskeligt ansigt tegnet proceduremæssigt ved hjælp af
ctx.bezierCurveToogctx.ellipse - Øjne der følger markøren i realtid — pupiller sporer musen med begrænset bevægelse
- Tilfældig blinken med variabel timing (tilfældig 180–480 billeder)
- Periodisk glitch-effekt —
getImageData/putImageDataudsnitsforskydning + rød farvetone - CRT-scanlinjer — vandrette linjer med 4px mellemrum over hele canvas
- Radial vignet — mørke kanter der lukker sig
- Brugerdefineret markør — standardmarkør skjult, erstattet af lille rød prik
- Blokeret: højreklik, F12, Ctrl+U/I/S, Escape, scroll
- Beskeder med progressiv fade-in (2s og 5s forsinkelse)
- Mus forlader vindue: tekstfarve skifter + bogstavafstand udvides
- Subtil åndedrætsanimation på body-elementet
Manager Interface
- Dynamisk logo — genereret fra hjemmesidens URL. Hvert ord farvet forskelligt. Store bogstaver i URL = separat farve per ord
- Diskforbrugslinje — visuel linje der viser brugt / samlet plads med nøjagtige MiB/GiB-værdier. Cache opdateret hvert 5. minut
- Animeret sprogskifter — pille glider jævnt mellem EN / RO / DK (cubic-bezier). Nul sideindlæsning — fuld UI gengives via
applyUiLang(). På mobil: simple kantede knapper - Header-knapper: 📋 Log · ⚠ Fejl · 🐘 PHP · ⌨ Genveje · 🔓/🔒 Root OFF/ON · ▶ Forhandsvisning · 💾 Gem · Log ud
- Navigation — ← Tilbage / → Frem med fuld historik. Knapper korrekt deaktiverede ved historikgrænserne
- Brødkrummesti — klikbare stisgmenter til hurtig navigation
- Søg filer — filnavnesøgning (max 100 resultater, ufølsom for store/små bogstaver, rekursiv)
- I filer — skifte til indholdsøgningspanelet
- Ny Mappe / Ny Fil — modal med navneinput
- Kan ændres i størrelse — træk kant (min 160px, max 520px). Gemt i localStorage + sessionStorage. Dobbeltklik = nulstil til 270px
- SERVERFILER — fuld fil/mappe-træ med typeikoner
- Favoritter ⭐ — stjerne/fjern stjerne fra enhver fil eller mappe. Gemt server-side. Inline SVG-stjerneikon i listen
- Flervalg — afkrydsningsfelter + Vælg alle. Massehandling: ZIP · Download · Omdøb · Slet
- Masse-ZIP — opret navngivet arkiv fra valgte elementer
- Masse-download — valgte som ZIP, streamet direkte til browser (bygget via
tempnam, slettet umiddelbart efter overførsel) - Multi-omdøbning — masse-omdøbningsguide til valgte filer
- Upload-zone — træk & slip eller klik. Konfliktmodal: Erstat / Behold begge (auto-nummereret) / Annuller
- Indholdsøgningsinput — søg inde i filer fra sidepanelet
Kodeeditor
Bygget pa CodeMirror 5 med 75+ CDN-scripts. Tema: Dracula dark.
Særlig filnavnsgenkendelse: .htaccess → shell · .env → shell · Dockerfile → dockerfile · Makefile → shell · .gitignore → shell · .babelrc / .eslintrc → JSON
- Parentesmatch · Auto-luk parenteser · Fremhævning af aktiv linje
- Kodefoldning — foldGutter med 4 folde-addons (klammer, indrykning, XML, kommentar)
- Autofuldfoersel — 5 hint-motorer (anyword, JS, CSS, HTML, XML). 400ms forsinkelse, min 3 tegn, undertrykt i strenge/kommentarer.
Ctrl+Space= manuelt - Kommenter/fjern kommentar —
Ctrl+/ - Skriftstørrelseskontrol — A− / A+ i bundlinjen
- Brugerdefinerede rullepaneler — macOS-stil (3px transparent kant)
- Billedforhandsvisning — jpg, jpeg, png, gif, webp, svg, ico vist inline i stedet for editor
- Flere filer aabne samtidigt
- Omarrangering via træk & slip — venstre/højre slippe-indikator med violet box-shadow
- Ændringsprik — visuel indikator når filen har ugemte ændringer
- Fane-kontekstmenu (højreklik): Luk / Luk andre / Luk uændrede / Luk alle
- Advarsel om ugemte ændringer ved lukning
- Fremhæver alle matches samtidigt med markText
- Aktivt match i anden farve — tallerafvisning:
3 / 12 - Naviger: Enter (næste) / Shift+Enter (forrige)
- Erstat ét → / Erstat alle ⟳
Kodeanalysator / Linter
Åbner som et sidepanel ved siden af editoren via knappen 🔍 Analyser. Understøtter: .php · .css · .scss · .less · .js · .ts · .jsx · .tsx
.min.js, .bundle.js m.fl.) eller indhold (gns. linje >300 tegn). Viser venlig besked med knappen “Analyser alligevel →”.| Tjek | Alvorlighed | Beskrivelse |
|---|---|---|
| PHP Syntaks | 🔴 error | php -l via shell_exec eller token_get_all() ParseError-fallback |
| var_dump / print_r efterladt i kode | 🟡 warning | Fejlretnings-output ikke fjernet |
| $_SERVER['PHP_SELF'] uden htmlspecialchars() | 🟡 warning | XSS-sårbarhed |
| die()/exit() med hardkodet streng | 🟡 warning | Afslører serverinfo i produktion |
| $_POST/$_GET/$_REQUEST uden isset() | 🟡 warning | Kontekstbevidst — 3 linjer op/ned tjekket |
| PHP-funktions-stavefejl (118 mønstre) | 🔴 error | array_mpa → array_map, jsno_encode → json_encode, etc. |
| Duplikerede funktionsdefinitioner | 🔴 error | Med reference til første-definitions-linjen |
| return uden for enhver funktion | 🟡 warning | Strukturel klammerybde-analyse |
| md5() til adgangskoder | 🟡 warning | Kun når tæt på password/pass/pwd/hash kontekst |
| TODO / FIXME / HACK | 🔵 info | Fuld kommentartekst udtrukket |
| Tjek | Alvorlighed | Beskrivelse |
|---|---|---|
| Ugyldig CSS-egenskab | 🟡 warning | 200+ gyldige egenskaber valideret |
| CSS-egenskabs-stavefejl | 🟡 warning | ~150 mønstre, Levenshtein ≤ 3 forslag |
| Ugyldig egenskabsværdi | 🟡 warning | Værdi valideret mod kendte gyldige muligheder per egenskab |
| Duplikeret egenskab i blok | 🟡 warning | Samme egenskab defineret to gange i samme blok |
| Dobbelt semikolon ;; | 🟡 warning | Hyppig tastefejl |
| Tjek | Alvorlighed | Beskrivelse |
|---|---|---|
| console.log efterladt i kode | 🔵 info | Fjern inden produktionsdeploy |
| debugger; efterladt i kode | 🟡 warning | Stopper udførelse i browser |
| typeof sammenlignet med == | 🟡 warning | Bør bruge === |
| Ugyldig NaN-sammenligning (=== NaN) | 🔴 error | Brug Number.isNaN() eller isNaN() |
| eslint-disable efterladt i kode | 🔵 info | Kan være glemt |
| TODO / FIXME / HACK | 🔵 info | Fuld kommentartekst udtrukket |
ZIP-browser
Klik på en .zip-fil → åbner som panel der erstatter editorzonen.
- Udvidbart træ — hierarkisk med dybdeindrykning
- Kaskaderende afkrydsningsfelter — vælg mappe = vælg alle underelementer rekursivt. Delvis valg = individuelle filer sendt
- Brugerdefineret hierarkisk sortering — mapper først, filer alfabetisk
- Selektiv udtrækning — intelligent præfiks-fjernelse, ingen uønskede indlejrede stier
- Konflikt-fortjek — viser præcis hvilke filer der ville blive overskrevet før udtrækning
- Udtrækning via træk & slip — træk fra ZIP-panel til mappe i filepanelet. Destinationsmappen fremhæves ved hover
- Fuld udtrækning — udtræk alt indhold på én gang
Filsoegning
Søgefelt i værktøjslinje — rekursiv filnavnesøgning, ufølsom for store/små bogstaver, max 100 resultater, øjeblikkelige resultater i sidepanelet.
- Søger inde i filer — max 50 filer × 5 matches per fil
- Resultater grupperet per fil med match-antal-badge
- Linjenummer + indhold med søgeterm fremhævet i gult
- Klik på resultat → åbner fil, hopper til præcis linje
- Kun tekstudvidelser — springer binærfiler over
Sammenlign & Diff
Hver gemning opretter automatisk .bak. ↕ Diff .bak viser visuelt diff med 3-linje kontekst. Knappen “Gendan fra .bak” er tilgængelig.
- Fil 1: aktuel editorfil (automatisk)
- Fil 2: klik på en fil i sidepanelet mens panelet er åbent
- Statistik:
+N tilføjet / -N fjernet - Farvekodede: ændret (rav/blå) · tilføjet (grøn) · fjernet (rød) · adskiller (mørk)
- Uafhængig rulning per kolonne
Multi-omdoebning
- Mønsterkontroller: Præfiks · Suffiks · Find · Erstat (alle kan kombineres)
- Auto-nummerering: 001, 002, 003…
- Live forhandsvisning: gammelt navn → nyt navn per fil. Individuelle inputs redigérbare
- Ændrede navne fremhævet i gult
- Alle omdøbninger i én operation med konfliktdetektering
Aktivitetslog
Hver handling logget: LOGIN · LOGOUT · SAVE · UPLOAD · DELETE · RENAME · NY MAPPE · NY FIL · ZIP · UNZIP · UNZIP-SELEKTIV · CHMOD · RYD CACHE · MULTI-OMDØB — med tidsstempel, handlingstype, filsti. IP-adresse kun logget for LOGIN og LOGOUT. Gemt i writable/.activity_log som JSON. Kan ryddes fra modal.
- Parser CI4-format (
LEVEL - DATE --> MSG) og PHP-standard ([date] PHP Fatal error:) logformater - Rekonstruerer fulde stack traces
- Grupperet efter alvorlighed: Fatal · Fejl · Advarsel · Besked · Info
- Kollaps/udvid per gruppe
- Stack traces vist inline med APPPATH/SYSTEMPATH fremhævning
- Omvendt kronologisk rækkefølge
Root-tilstand
Root OFF (standard) — navigation begrænset til dokumentrod (public_html).
Root ON — naviger over public_html til serverroden. Adgang til logs, konfigurationer, filer uden for webroden. Advarsel vist som toast-besked og header-knap ændres til 🔑 Root ON når aktiv.
Backend AJAX API
Alle operationer via manager.php?action=ACTION:
| Backend API | Beskrivelse |
|---|---|
| list | Mappeindhold — navn, type, størrelse, ændret, sti, tilladelser |
| read | Filindhold (max 5MB) |
| readimage | Billede som base64 data-URI (jpg, png, gif, webp, svg, ico) |
| save | Gem fil — opretter automatisk .bak af forrige version |
| upload | Upload — tilstande: spørg / erstat / kopiér (auto-nummereret) |
| download | Download enkelt fil via HTTP |
| download-zip | Flere filer som ZIP — bygget via tempnam, streamet til browser, slettet umiddelbart efter |
| delete | Slet filer/mapper — rekursiv, valgfri .bak sikkerhedskopi |
| rename | Omdøb — konfliktdetektering, valgfri tvungen overskrivning |
| newfolder | Opret mappe (rekursiv mkdir) |
| newfile | Opret tom fil |
| zip | Opret ZIP-arkiv på server |
| zip-list | ZIP-indhold som hierarkisk træ |
| unzip | Udtræk fuldt ZIP-arkiv |
| unzip-selective | Udtræk valgte elementer med intelligent præfiks-fjernelse |
| unzip-check | Fortjek udtrækningskonflikter før udtrækning |
| chmod | Skift fil/mappe-tilladelser |
| search | Rekursiv filnavnesøgning (max 100 resultater) |
| searchcontent | Tekst inde i filer (max 50 filer × 5 matches) |
| diskusage | Diskforbrug — crawler 2 niveauer over docroot, cachet 5 minutter |
| diff | Fil vs .bak med 3-linje kontekst |
| compare | Side-om-side diff mellem to vilkårlige filer |
| lint | PHP/CSS/JS-analyse — struktureret problemarray |
| errorlog | Parser PHP fejllog (CI4 + standardformat) |
| phpinfo | Parset PHP-info — version, udvidelser, indstillinger |
| getfavorites | Vis foretrukne stier |
| togglefavorite | Tilføj til eller fjern fra favoritter |
| getlog | Aktivitetslog-poster |
| clearlog | Ryd aktivitetslog |
| clearcache | LiteSpeed purge-header + CI4 writable/cache-mappe-rydning |
| getdocroot | Serverens dokumentrodsti |
| multirename | Masseomdøbning med konfliktdetektering |
Flersproget
240+ oversættelsesnøgler per sprog. Alle manager UI-tekster oversat — EN / RO / DK.
- Skift uden sideindlæsning —
switchLang()→applyUiLang()+loadFiles()+renderTabs() - Alle DOM-elementer opdateret: knapper, modaler, pladsholdere, snydelap (fuldt regenereret), ZIP-hints, timeout-linje
- Sprog gemt i cookie +
writable/.manager_config - Animeret pille-skifter (desktop): cubic-bezier glidning, ingen overgang ved init for at undgå blink
Mobil
| Brudpunkt | Adfaerd |
|---|---|
| < 425px | Log skjult, diskbarre skjult, mikroknapper 8px, simpel sprogskifter |
| 425–599px | Log vises foerst (order:-1) foer Fejl |
| 600–1023px | Sprogskifter statisk i header (ingen absolut positionering) |
| 1024–1100px | Sprogskifter statisk, kompakt vaerktoejslinje |
| > 1100px | Fuld desktop-layout, animeret pille centreret absolut |
- Sidepanelsskuffe — glider fra venstre, overlay for at lukke, lukker automatisk ved filaabning / ZIP / billede, forbliver aaben ved mappenavigeringen
- Langt tryk 500ms — kontekstmenu ved berøringsposition, haptisk feedback (
navigator.vibrate(30)), bevæg finger = annuller - Fanesystem — max-bredde 90px, ellipse, luk altid synlig, vandret rulning
- Diff/Sammenlign — skjult under 768px (utilstrækkelig plads til delt visning)
Tastaturgenveje
| Genvej | Handling |
|---|---|
| Ctrl + S | Gem aktuel fil |
| Ctrl + W | Luk aktuel fane |
| Ctrl + Z | Fortryd |
| Ctrl + Y | Genopret |
| Ctrl + F | Find i fil |
| Ctrl + H | Find & Erstat |
| Ctrl + / | Kommenter / fjern kommentar pa linje |
| Tab | Indryk markering |
| Ctrl + Space | Manuel autofuldfoersel |
| Escape | Luk autofuldfoersel / modal |
| A+ / A− | Forøg / formindsk skriftstørrelse |
| Right-click file | Kontekstmenu |
| Right-click tab | Fane-kontekstmenu |
| Drag tab | Omarrangér faner |
| Drag sidebar border | Skift størrelse på sidepanel |
| Double-click border | Nulstil sidepanelbredde til standard |
Krav
- PHP 8.0 eller nyere — testet op til PHP 8.4 (kræver PHP 8.0+ til
str_starts_with()) - ZipArchive-udvidelse — tilgængeligt pa de fleste delt webhosting som standard
- Mappen
writable/skal være skrivbar — oprettes automatisk ved foerste koering - Ingen Composer · Ingen npm · Ingen database · Ingen framework