107 lines
4.0 KiB
Plaintext
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.
|