Files
SFTPsync/doc/prompt.txt
2026-02-16 07:23:55 +01:00

107 lines
4.0 KiB
Plaintext

----- 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 <host>`
* `--user <user>`
* `--password <password>`
**Nepovinné:**
* `--port <port>` (default `22`)
**Opakovateľné akcie (môžu byť zadané viackrát, v ľubovoľnom poradí):**
* `--sync <local_dir> <remote_dir>`
Synchronizácia **lokál → vzdialené** (upload).
* `--sync-down <remote_dir> <local_dir>`
Synchronizácia **vzdialené → lokál** (download).
* `--delete <remote_file>`
Zmaže vzdialený súbor.
* `--delete-dir <remote_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 <remote_file>`:
* Skontroluj existenciu (ak sa dá); ak neexistuje, loguj `SKIP` a pokračuj.
* `--delete-dir <remote_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.