----- 2026-02-15 14:10:18 ----------------------------------------------------- **Úloha:** Vytvor CLI PHP skript `sftpsync2.php` na synchronizáciu cez SFTP. Skript musí používať triedu/vrstvu z `SFTPconnection.php` na pripojenie k SFTP (Secure FTP cez SSH). Neimplementuj pripojenie “od nuly”, iba ho používaj. ### 1) Požiadavky na CLI rozhranie Skript musí spracovať argumenty z `argv` v štýle GNU: **Povinné:** * `--host ` * `--user ` * `--password ` **Nepovinné:** * `--port ` (default `22`) **Opakovateľné akcie (môžu byť zadané viackrát, v ľubovoľnom poradí):** * `--sync ` Synchronizácia **lokál → vzdialené** (upload). * `--sync-down ` Synchronizácia **vzdialené → lokál** (download). * `--delete ` Zmaže vzdialený súbor. * `--delete-dir ` Zmaže vzdialený adresár (rekurzívne). **Pravidlo:** Minimálne jedna akcia musí byť zadaná, inak vypíš help a skonči chybou. ### 2) Pomoc a validácia * `--help` alebo `-h` vypíše použitie + príklady. * Validuj povinné parametre a formát vstupov. * Pri chybe argumentov vráť exit code `2`. * Pri zlyhaní pripojenia alebo SFTP operácie vráť exit code `1`. * Pri úspechu `0`. ### 3) Poradie spracovania akcií * Spracuj akcie **presne v poradí**, v akom boli zadané v CLI. * Ak jedna akcia zlyhá, skonči a ďalšie už nespúšťaj (fail-fast), pokiaľ nie je explicitne uvedené inak. ### 4) Synchronizácia: špecifikácia správania Pre `--sync` (upload) a `--sync-down` (download): * Rekurzívne prechádzaj zdrojový adresár. * Prenášaj súbory, ktoré: * neexistujú na cieli, alebo * majú odlišnú veľkosť, alebo * majú novší `mtime` na zdroji (ak sa dá zistiť na oboch stranách; ak nie, používaj veľkosť + checksum nie je povinný). * Vytváraj chýbajúce adresáre na cieli. * Zachovaj relatívnu štruktúru ciest. * Loguj pre každý súbor jednu z akcií: `SKIP`, `UPLOAD`, `DOWNLOAD`, `MKDIR`, `DELETE`, `RMDIR`, `ERROR`. **Poznámka:** Nevyžadujem “mirror delete” (mazanie súborov, ktoré nie sú na zdroji) — sync je iba kopírovanie/aktualizácia. Mazanie sa robí výlučne cez `--delete` a `--delete-dir`. ### 5) Mazanie * `--delete `: * Skontroluj existenciu (ak sa dá); ak neexistuje, loguj `SKIP` a pokračuj. * `--delete-dir `: * Rekurzívne zmaž obsah (súbory aj podadresáre), potom samotný adresár. * Chráň sa pred nebezpečnými cestami: odmietni `""`, `/`, `.` a podobné “root-like” hodnoty (bezpečnostná poistka). ### 6) Integrácia so SFTPconnection.php * Predpokladaj, že `SFTPconnection.php` poskytuje objekt na: * pripojenie (`connect()`), * upload/download súboru, * listovanie adresára, * vytváranie adresára, * zisťovanie `stat` (min. veľkosť a mtime ak dostupné), * mazanie súboru a adresára. * Ak API nie je úplne jasné, sprav adaptér/obalové metódy v `sftpsync2.php`, ktoré volajú existujúce metódy a centralizujú rozdiely. ### 7) Kódové štandardy * PHP 8+. * Žiadne externé balíčky. * Striktné typy (`declare(strict_types=1);`). * Prehľadná štruktúra: parser argumentov, runner akcií, sync funkcie, pomocné utily (cesty, logovanie). * Logovanie na STDOUT, chyby na STDERR. * Jasné komentáre tam, kde je to neintuitívne. ### 8) Príklady použitia (musíš ich uviesť v help) * Upload sync: * `php sftpsync2.php --host example.com --user u --password p --sync ./local /var/www` * Download sync: * `php sftpsync2.php --host example.com --user u --password p --sync-down /var/backups ./backups` * Viac akcií: * `php sftpsync2.php --host example.com --user u --password p --sync ./a /remote/a --delete /remote/a/old.zip --sync-down /remote/logs ./logs` * Delete dir: * `php sftpsync2.php --host example.com --user u --password p --delete-dir /tmp/testdir` **Výstup:** Vygeneruj kompletný obsah súboru `sftpsync2.php` (jeden súbor), pripravený na spustenie.