Instalare
manager.php pe serverul tau — oriunde in radacina webcomposer install. Fara npm. Fara baza de date. Fara modificari .htaccess. Configuratia stocata automat in writable/.manager_config.Prima Rulare — Setup de Configurare
La prima lansare, managerul afiseaza un setup complet de configurare cu un fundal intunecat cinematic — SVG animat cu stele, linii de constelatie, trei inele geometrice rotative si numele de brand personal TYRUS si ANGEL luminand pe fiecare parte.
- Minimum 8 caractere
- Indicator live rezistenta parola cu 7 criterii de evaluare
- Indicator live de potrivire parola intre ambele campuri
- Buton “Sugereaza parola puternica” — genereaza automat o parola sigura
- Comutator afisare/ascundere pe ambele campuri
- URL complet — folosit de butonul Previzualizare si la curatarea cache-ului
- Validare URL inline
- Sfat logo: scrie cu majuscula fiecare cuvant din domeniu pentru efect logo multicolor
- Butoane predefinite: 10 / 20 / 50 / 100 / 200 GB (desktop), grila 3 coloane (mobil)
- Input GB personalizat cu butoane spinner ▲▼
- Afisare live conversie bytes
requestAnimationFrame.Autentificare & Securitate
- Parola verificata fata de hash-ul bcrypt din
writable/.manager_config - Protectie brute-force — IP urmarit in
writable/.login_attempts - Incercare 1: “Ceva nu pare in regula aici.”
- Incercare 2: “Interesant... continui?”
- Incercare 3: IP blocat permanent — “Ne vedem intr-o alta viata.” — scris in
writable/.blocked_ips - Expirare sesiune — 30 minute inactivitate → redirectare automata la login
- Bara de avertizare apare cu 2 minute inainte de expirare cu numaratoare inversa live
- Butonul “Extinde” reseteaza simultan timer-ul JS si sesiunea PHP
- Evenimentele de activitate (mousemove, keydown, click, scroll) reseteaza contorul de inactivitate
- Toate actiunile inregistrate cu timestamp in
writable/.activity_log— adresa IP inregistrata doar pentru LOGIN si LOGOUT
Ecran Blocare IP
Cand un IP este blocat, in loc de o pagina de eroare obisnuita, se afiseaza o experienta animata in panza pe tot ecranul:
- Fata umana desenata procedural folosind
ctx.bezierCurveTosictx.ellipse - Ochi care urmaresc cursorul in timp real — pupilele urmaresc mouse-ul cu miscare limitata
- Clipire aleatorie cu temporizare variabila (randomizata 180–480 cadre)
- Efect glitch periodic — deplasare sectiune
getImageData/putImageData+ nuanta rosie - Scanlinii CRT — linii orizontale la intervale de 4px pe intreaga panza
- Vigneta radiala — margini intunecate care se inchid
- Cursor personalizat — cursorul implicit ascuns, inlocuit cu un punct rosu mic
- Blocat: click dreapta, F12, Ctrl+U/I/S, Escape, scroll
- Mesaje cu aparitie progresiva (intarzieri de 2s si 5s)
- Mouse paraseste fereastra: culoarea textului se schimba + spatiul dintre litere se extinde
- Animatie subtila de respiratie pe elementul body
Interfata Manager
- Logo dinamic — generat din URL-ul site-ului. Fiecare cuvant colorat diferit. Majusculele in URL = culoare separata per cuvant
- Bara utilizare disk — bara vizuala care arata spatiul folosit / total cu valori exacte MiB/GiB. Cache actualizat la fiecare 5 minute
- Selector animat de limba — pilula aluneca lin intre EN / RO / DK (cubic-bezier). Zero reincarcari pagina — interfata completa re-randata prin
applyUiLang(). Pe mobil: butoane simple cu chenar - Butoane antet: 📋 Jurnal · ⚠ Erori · 🐘 PHP · ⌨ Scurtaturi · 🔓/🔒 Root OFF/ON · ▶ Previzualizare · 💾 Salveaza · Iesire
- Navigare — ← Inapoi / → Inainte cu istoric complet. Butoane dezactivate corect la limitele istoricului
- Breadcrumb — segmente de cale clicabile pentru navigare rapida
- Cautare fisiere — cautare dupa numele fisierului (max 100 rezultate, fara distinctie majuscule, recursiva)
- In fisiere — comutator pentru panoul de cautare in continut
- Folder Nou / Fisier Nou — modal cu camp pentru nume
- Redimensionabil — tragere chenar (min 160px, max 520px). Persistat in localStorage + sessionStorage. Dublu-click = resetare la 270px
- FISIERE SERVER — arbore complet de fisiere/foldere cu iconite de tip
- Favorite ⭐ — marcheaza/demarcheaza orice fisier sau folder. Stocat pe server. Iconita stea SVG inline in lista
- Selectie multipla — casute de selectie + Selecteaza Tot. In lot: ZIP · Descarca · Redenumeste · Sterge
- ZIP in lot — creaza o arhiva cu nume din elementele selectate
- Descarcare in lot — selectate ca ZIP, transmise direct in browser (construit prin
tempnam, sters imediat dupa transfer) - Redenumire multipla — setup de redenumire in lot pentru fisierele selectate
- Zona upload — trage & elibereaza sau click. Modal conflict: Inlocuieste / Pastreaza ambele (auto-numerotate) / Anuleaza
- Input cautare continut — cauta in interiorul fisierelor din bara laterala
Editor de Cod
Construit pe CodeMirror 5 cu 75+ scripturi CDN. Tema: Dracula dark.
Detectie speciala dupa nume fisier: .htaccess → shell · .env → shell · Dockerfile → dockerfile · Makefile → shell · .gitignore → shell · .babelrc / .eslintrc → JSON
- Potrivire paranteze · Auto-inchidere paranteze · Evidentierea liniei active
- Pliere cod — foldGutter cu 4 addon-uri de pliere (acolada, indentare, XML, comentariu)
- Autocompletare — 5 motoare de sugestii (anyword, JS, CSS, HTML, XML). Intarziere 400ms, min 3 caractere, suprimata in siruri/comentarii.
Ctrl+Space= manual - Comentare/decomentare —
Ctrl+/ - Control marime font — A− / A+ in bara de jos
- Scrollbar-uri personalizate — stil macOS (chenar transparent 3px)
- Previzualizare imagine — jpg, jpeg, png, gif, webp, svg, ico afisate inline in loc de editor
- Mai multe fisiere deschise simultan
- Reordonare prin drag & drop — indicator de plasare stanga/dreapta cu box-shadow violet
- Punct modificat — indicator vizual cand fisierul are modificari nesalvate
- Meniu contextual fila (click dreapta): Inchide / Inchide Celelalte / Inchide Nemodificate / Inchide Tot
- Avertisment modificari nesalvate la inchidere
- Evidentiaza toate potrivirile simultan cu markText
- Potrivire activa cu culoare diferita — afisaj contor:
3 / 12 - Navigare: Enter (urmatorul) / Shift+Enter (anteriorul)
- Inlocuieste Unul → / Inlocuieste Tot ⟳
Analizor Cod / Linter
Se deschide ca panou lateral langa editor prin butonul 🔍 Analizeaza. Suporta: .php · .css · .scss · .less · .js · .ts · .jsx · .tsx
.min.js, .bundle.js, etc.) sau continut (linie medie >300 caractere). Afiseaza mesaj prietenos cu buton “Analizeaza oricum →”.| Verificare | Severitate | Descriere |
|---|---|---|
| Sintaxa PHP | 🔴 error | php -l prin shell_exec sau fallback token_get_all() ParseError |
| var_dump / print_r lasat in cod | 🟡 warning | Output debug neeleminat |
| $_SERVER['PHP_SELF'] fara htmlspecialchars() | 🟡 warning | Vulnerabilitate XSS |
| die()/exit() cu sir hardcodat | 🟡 warning | Expune informatii server in productie |
| $_POST/$_GET/$_REQUEST fara isset() | 🟡 warning | Constient de context — verificate 3 linii sus/jos |
| Greseli de tipar functii PHP (118 tipare) | 🔴 error | array_mpa → array_map, jsno_encode → json_encode, etc. |
| Definitii de functii duplicate | 🔴 error | Cu referinta la linia primei definitii |
| return in afara oricarei functii | 🟡 warning | Analiza structurala a adancimii acoladelor |
| md5() pentru parole | 🟡 warning | Doar cand e langa contextul password/pass/pwd/hash |
| TODO / FIXME / HACK | 🔵 info | Textul complet al comentariului extras |
| Verificare | Severitate | Descriere |
|---|---|---|
| Proprietate CSS invalida | 🟡 warning | 200+ proprietati valide verificate |
| Greseala de tipar proprietate CSS | 🟡 warning | ~150 tipare, sugestie Levenshtein ≤ 3 |
| Valoare de proprietate invalida | 🟡 warning | Valoare verificata fata de optiunile valide cunoscute per proprietate |
| Proprietate duplicata in bloc | 🟡 warning | Aceeasi proprietate definita de doua ori in acelasi bloc |
| Punct si virgula dublu ;; | 🟡 warning | Greseala de tipar frecventa |
| Verificare | Severitate | Descriere |
|---|---|---|
| console.log lasat in cod | 🔵 info | Eliminati inainte de productie |
| debugger; lasat in cod | 🟡 warning | Opreste executia in browser |
| typeof comparat cu == | 🟡 warning | Trebuie folosit === |
| Comparatie NaN invalida (=== NaN) | 🔴 error | Folositi Number.isNaN() sau isNaN() |
| eslint-disable lasat in cod | 🔵 info | Poate fi uitat |
| TODO / FIXME / HACK | 🔵 info | Textul complet al comentariului extras |
Browser ZIP
Click pe orice fisier .zip → se deschide ca panou in locul zonei editorului.
- Arbore expandabil — ierarhic cu indentare pe nivele
- Casute de selectie in cascada — selectia folderului = selectia tuturor elementelor copil recursiv. Selectie partiala = fisiere individuale trimise
- Sortare ierarhica personalizata — foldere primul, fisiere alfabetic
- Extractie selectiva — eliminare inteligenta prefix, fara cai imbricate nedorite
- Pre-verificare conflicte — arata exact fisierele care vor fi suprascrise inainte de extractie
- Extractie prin drag & drop — trage din panoul ZIP pe un folder din panoul de fisiere. Folderul destinatie se evidentiaza la hover
- Extractie completa — extrage tot continutul dintr-o data
Cautare Fisiere
Casuta de cautare din bara de unelte — cautare recursiva dupa numele fisierului, fara distinctie majuscule, max 100 rezultate, rezultate instant in bara laterala.
- Cauta in interiorul fisierelor — max 50 fisiere × 5 potriviri per fisier
- Rezultate grupate pe fisier cu insigna numar de potriviri
- Numar linie + continut cu termenul cautat evidentiat in galben
- Click pe rezultat → deschide fisierul, sare la linia exacta
- Doar extensii text — sarind fisierele binare
Comparare & Diff
Fiecare salvare creaza automat .bak. ↕ Diff .bak arata diff vizual cu context de 3 linii. Buton “Restaureaza din .bak” disponibil.
- Fisier 1: fisierul curent din editor (automat)
- Fisier 2: click pe orice fisier din bara laterala in timp ce panoul este deschis
- Statistici:
+N adaugate / -N eliminate - Codificate prin culori: modificat (chihlimbar/albastru) · adaugat (verde) · eliminat (rosu) · separator (inchis)
- Derulare independenta per coloana
Redenumire Multipla
- Controale tipare: Prefix · Sufix · Gaseste · Inlocuieste (toate combinabile)
- Numerotare automata: 001, 002, 003…
- Previzualizare live: nume vechi → nume nou per fisier. Inputuri individuale editabile
- Numere modificate evidentiate in galben
- Toate redenumirile intr-o singura operatie cu detectie conflicte
Jurnal Activitate
Fiecare actiune inregistrata: LOGIN · LOGOUT · SAVE · UPLOAD · DELETE · RENAME · NEW FOLDER · NEW FILE · ZIP · UNZIP · UNZIP-SELECTIVE · CHMOD · CLEAR CACHE · MULTI-RENAME — cu timestamp, tip actiune, cale fisier. Adresa IP inregistrata doar pentru LOGIN si LOGOUT. Stocat in writable/.activity_log ca JSON. Poate fi sters din modal.
- Parseaza format CI4 (
LEVEL - DATE --> MSG) si standard PHP ([date] PHP Fatal error:) formate log - Reconstruieste trace-uri de stiva complete
- Grupate dupa severitate: Fatal · Eroare · Avertisment · Nota · Info
- Restringe/extinde per grup
- Stack trace-uri afisate inline cu evidentierea APPPATH/SYSTEMPATH
- Ordine cronologica inversa
Mod Root
Root OFF (implicit) — navigare limitata la radacina documentelor (public_html).
Root ON — navigheaza deasupra public_html spre radacina serverului. Acces la loguri, configuratii, fisiere din afara radacinii web. Avertisment afisat ca notificare toast si butonul din antet se schimba in 🔑 Root ON cand este activ.
API Backend AJAX
Toate operatiunile prin manager.php?action=ACTION:
| API Backend | Descriere |
|---|---|
| list | Continut director — nume, tip, marime, modificat, cale, permisiuni |
| read | Continut fisier (max 5MB) |
| readimage | Imagine ca URI base64 (jpg, png, gif, webp, svg, ico) |
| save | Salveaza fisier — creaza automat .bak al versiunii anterioare |
| upload | Upload — moduri: intreaba / inlocuieste / copiaza (auto-numerotate) |
| download | Descarca un singur fisier prin HTTP |
| download-zip | Mai multe fisiere ca ZIP — construit prin tempnam, transmis in browser, sters imediat dupa |
| delete | Sterge fisiere/foldere — recursiv, backup .bak optional |
| rename | Redenumeste — detectie conflicte, suprascriere fortata optionala |
| newfolder | Creaza director (mkdir recursiv) |
| newfile | Creaza fisier gol |
| zip | Creaza arhiva ZIP pe server |
| zip-list | Continut ZIP ca arbore ierarhic |
| unzip | Extrage arhiva ZIP completa |
| unzip-selective | Extrage elemente selectate cu eliminare inteligenta prefix |
| unzip-check | Pre-verificare conflicte extractie inainte de extractie |
| chmod | Schimba permisiunile fisierului/folderului |
| search | Cautare recursiva dupa numele fisierului (max 100 rezultate) |
| searchcontent | Text in interiorul fisierelor (max 50 fisiere × 5 potriviri) |
| diskusage | Utilizare disk — parcurge 2 niveluri deasupra docroot, cache 5 minute |
| diff | Fisier vs .bak cu context de 3 linii |
| compare | Diff paralel intre orice doua fisiere |
| lint | Analiza PHP/CSS/JS — array structurat de probleme |
| errorlog | Parseaza log-ul de erori PHP (format CI4 + standard) |
| phpinfo | Info PHP parsat — versiune, extensii, setari |
| getfavorites | Listeaza caile adaugate la favorite |
| togglefavorite | Adauga sau elimina din favorite |
| getlog | Intrari jurnal activitate |
| clearlog | Curata jurnalul de activitate |
| clearcache | Header purge LiteSpeed + stergere folder writable/cache CI4 |
| getdocroot | Calea radacinii documentelor de server |
| multirename | Redenumire in lot cu detectie conflicte |
Multilingv
240+ chei de traducere per limba. Toate textele din interfata manager traduse — EN / RO / DK.
- Schimbare fara reincarcarea paginii —
switchLang()→applyUiLang()+loadFiles()+renderTabs() - Toate elementele DOM actualizate: butoane, modaluri, placeholder-uri, cheatsheet (complet regenerat), sugestii ZIP, bara timeout
- Limba persistata in cookie +
writable/.manager_config - Comutator pilula animat (desktop): glisare cubic-bezier, fara tranzitie la initializare pentru a evita flash
Mobil
| Punct de rupere | Comportament |
|---|---|
| < 425px | Jurnal ascuns, bara disk ascunsa, butoane micro 8px, selector limba simplu |
| 425–599px | Jurnalul apare primul (order:-1) inainte de Erori |
| 600–1023px | Selector limba static in antet (fara pozitionare absoluta) |
| 1024–1100px | Selector limba static, bara de unelte compacta |
| > 1100px | Layout desktop complet, pilula animata centrata absolut |
- Sertar bara laterala — aluneca din stanga, overlay pentru inchidere, se inchide automat la deschidere fisier / ZIP / imagine, ramane deschis la navigare in folder
- Apasare lunga 500ms — meniu contextual la pozitia de atingere, feedback haptic (
navigator.vibrate(30)), misca degetul = anuleaza - Sistem file — latime maxima 90px, puncte de suspensie, inchidere mereu vizibila, scroll orizontal
- Diff/Comparare — ascuns sub 768px (spatiu insuficient pentru vizualizare split)
Comenzi Rapide de la Tastatura
| Scurtatura | Actiune |
|---|---|
| Ctrl + S | Salveaza fisierul curent |
| Ctrl + W | Inchide fila curenta |
| Ctrl + Z | Anuleaza |
| Ctrl + Y | Refacere |
| Ctrl + F | Gaseste in fisier |
| Ctrl + H | Gaseste & Inlocuieste |
| Ctrl + / | Comenteaza / decomenteza linia |
| Tab | Indenteaza selectia |
| Ctrl + Space | Autocompletare manuala |
| Escape | Inchide autocompletare / modal |
| A+ / A− | Mareste / micsoreaza dimensiunea fontului |
| Right-click file | Meniu contextual |
| Right-click tab | Meniu contextual fila |
| Drag tab | Reordoneaza filele |
| Drag sidebar border | Redimensioneaza bara laterala |
| Double-click border | Reseteaza latimea barei laterale la valoarea implicita |
Cerinte
- PHP 8.0 sau mai nou — testat pana la PHP 8.4 (necesita PHP 8.0+ pentru
str_starts_with()) - Extensia ZipArchive — disponibila pe majoritatea hostingurilor shared by default
- Directorul
writable/trebuie sa fie cu drepturi de scriere — creat automat la prima rulare - Fara Composer · Fara npm · Fara baza de date · Fara framework