SSH2 a jeho použití v PHP – transfery dat (SCP a SFTP)
V předchozím článku o použití populárního SSH2 v prostředí PHP jsme si řekli něco málo o problematice instalace extension do PHP a poté jsme si vyzkoušeli připojit se k SSH serveru a poslat nějaký příkaz… Tentokrát bych se rád věnoval transferům dat pomocí SSH2. Řekneme si něco o použití SCP a SFTP, což jsou vlastně přenosové technologie využívající bezpečnosti SSH protokolu.
SCP
Začneme se SCP, protože je jeho použití nejjednodušší. V PHP existují pouze dvě funkce, které se SCP dokáží pracovat – je to samozřejmě funkce ke stažení a nahrání souboru na server. SCP již není v současnosti zrovna nejžádanější a navíc je zastaralé.
Nyní se tedy pokusíme nahrát na server mujserver.mojedomena.neco soubor, a to například z adresáře /lokalni/soubor.txt na /vzdaleny/soubor.txt. Jako v předchozím článku používám autentizaci heslem 123456799 a uživatelským jménem uzivatel. K nahrání souboru na server použijeme funkci ssh2_scp_send()
.
<?php
$spojeni = ssh2_connect(„mujserver.mojedomena.neco“, 22);
// Jako vzdy nejdrive provedeme spojeni se serverem.
ssh2_auth_password($spojeni, „uzivatel“, „123456799“);
// Nyni se prihlasime.
ssh2_scp_send($spojeni, „/lokalni/soubor.txt“, „/vzdaleny/soubor.txt“, 0660);
// A nakonec preneseme soubor. Za zminku stoji posledni parametr funkce – urcuje prava souboru, ktera budou prirazena na vzdalenem serveru. Prava se zapisuji ciselne a vice se o nich dozvite nejcasteji na webech zabyvajicich se Linuxem.
?>
Protože stažení souboru je velmi podobné, pouze změníme název funkce a pořadí parametrů. (Samozřejmě pro správnou funkčnost musí být nejprve zajištěno spojení se serverem.)
ssh2_scp_recv($spojeni, „/vzdaleny/soubor.txt“, „/lokalni/soubor.txt“);
Funkce ssh2_scp_recv()
nepodporuje žádný parametr, který by stanovil, s jakými právy přenést soubor.
SFTP
Základem úspěchu práce se SFTP je jeho inicializace, která probíhá za použití funkce ssh2_sftp()
. Aby to fungovalo, musí být v době použití této funkce aktivní spojení a platná autentizace do systému.
<?php
$sftp = ssh2_sftp($spojeni);
// Inicializujeme SFTP. Promenna $spojeni odkazuje na funkcni spojeni (viz prechodzi priklady).
$data = fopen(„ssh2.sftp://$sftp/cesta/k/souboru.txt“, „r“);
// Otevirame soubor pro cteni.
?>
Pomocí velmi podobného postupu by se tato ukázka dala použít nejenom pro čtení souborů, ale i pro zápis – stačí pouze ovládat funkce pro práci se souborovým systémem.
Teď se podíváme na dvě funkce, které pracují s adresáři. U těchto funkcí jsou dvě možnosti, jak určit, se kterou složkou pracovat.
První funkce, která nás bude zajímat je určena pro vytváření nových adresářů – ssh2_sftp_mkdir()
:
ssh2_sftp_mkdir($sftp, „/cesta/k/nove/vytvorenemu/adresari“);
// Prvni zpusob.
mkdir(„ssh2.sftp://$sftp/cesta/k/nove/vytvorenemu/adresari“);
// Druhy zpusob.
Druhá funkce, pro mazání adresářů, je ssh2_sftp_rmdir()
:
ssh2_sftp_rmdir($sftp, „/cesta/k/mazanemu/adresari“);
// Prvni zpusob.
rmdir(„ssh2.sftp://$sftp/cesta/k/mazanemu/adresari“);
// Druhy zpusob.
Jak jde vidět, rozdíl je v obou verzích zápisu nepatrný a funkčně jsou úplně stejné, je tudíž na každém, který zápis preferuje.
Další funkce, která nás zajímá, je ssh2_sftp_rename()
. Jak už název napovídá, slouží k přejmenování souborů. Pokusíme se o přejmenování souboru ze stary_nazev.txt na novy_nazev.txt:
ssh2_sftp_rename($sftp, „/stary_nazev.txt“, „/novy_nazev.txt“);
Bohužel, u této funkce již není možné používat dva různé zápisy, ale pouze jeden, a to ten, který zde uvádím.
Dále v extension SSH2 existuje sada funkcí pro práci se symbolickými odkazy, těmi se ale zabývat nebudeme. Pro stručnou informaci uvádím krátký výpis některých z nich:
- ssh2_sftp_symlink() – vytvoření symbolického odkazu
- ssh2_sftp_unlink() – zrušení symbolického odkazu
- ssh2_sftp_readlink() – zjištění cíle symbolického odkazu
Další užitečné funkce můžete najít v dokumentaci k extension SSH2.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Členská sekce: 4 důvody proč ji mít na svém webu
12. března 2024 -
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
Jak si vyzkoušet Apple Intelligence v EU
2. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024
Malej
Led 4, 2011 v 11:29Kde je chyba, když nefunguje druhý způsob vytváření, mazání(, …atd.) složek?