initialize commit
This commit is contained in:
106
doc/prompt.txt
Normal file
106
doc/prompt.txt
Normal file
@ -0,0 +1,106 @@
|
||||
----- 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.
|
||||
Reference in New Issue
Block a user