FTP (File Transfer Protocol) este un protocol standard care realizeaza o conexiune client-server pentru transfer si manipulare de fisiere prin Internet.
Cu ajutorul FTP puteti adauga si copia fisiere (si directoare) de pe server sau sa le schimbati permisiunile CHMOD. PHP are functii speciale pentru conectarea la server si lucrul cu FTP.
Pentru conectarea la server prin FTP sunt necesare 3 date importante: adresa serverului (a domeniului), numele de utilizator si parola de conectare prin FTP.
La inceput se deschide o conexiune cu serverul, folosind functia ftp_connect(), aceasta preia ca argument necesar numele serverului, care de obicei are forma "ftp.server" ("server" poate fi numele domeniului sau adresa IP a acestuia). Daca deschiderea conexiunii s-a efectuat, functia va returna un ID a conexiunii, in caz contrar returneaza FALSE.
Dupa deschiderea conexiunii se face autentificarea pe server, pentru aceasta se foloseste functia ftp_login() care are urmatoarea sintaxa:
ftp_login(conn_id, nume_user, parola)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "nume_user" este numele de utilizator pentru conectare la FTP, iar "parola" este parola utilizatorului.
Pentru inchiderea conectarii se foloseste functia ftp_close(), aceasta preia ca argument id-ul conexiunii.
Iata un exemplu de conectare prin FTP la server-ul unui site:
<?php // Datele pt. conectare la server $ftp_server = 'ftp.un_site.net'; // Poate fi de exemplu 'ftp.marplo.net' $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa autentificarea pe server (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { echo "Conectare reusita la serverul $ftp_server, pentru utilizatorul $ftp_user"; } // Inchide conexiunea ftp_close($conn_id); ?>
Pentru a prelua continutul unui director (numele fisierelor si directoarelor din el) se foloseste functia
ftp_nlist(conn_id, director)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "director" este numele directorului a carui continut va fi preluat
Aceasta functie returneaza o matrice secventiala a carei elemente sunt numele fiecarui director si fisier din catalogul cautat.
Mai jos este un exemplu practic.
<?php // Datele pt. conectare la server $ftp_server = 'ftp.domeniu_site'; // Poate fi de exemplu 'ftp.marplo.net' $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa conectare pe server (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { // Obtine continutul directorului (numele de fisiere si directoare din el) $continut = ftp_nlist($conn_id, "."); // Parcurge matricea si afiseaza numele directoarelor si fisierelor returnate for ($i=0; $i<count($continut); $i++) { echo '<br>'.$continut[$i]; } } // Inchide conexiunea ftp_close($conn_id); ?>
Pentru incarcarea (upload) unui fisier pe server prin FTP cu PHP se foloseste functia ftp_put(), aceasta returneaza TRUE daca incarcarea s-a efectuat cu succes, in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_put(conn_id, destinatie, fisier, tip_transfer)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "destinatie" este directorul (si numele fisierului) pe server unde va fi incarcat fisierul
- "fisier" este numele fisierului care va fi copiat
- "tip_transfer" reprezinta modul incarcarii pe server, acesta poate lua valoarea FTP_ASCII sau FTP_BINARY
Iata un exemplu in care se copie un fisier de pe calculatorul client pe server, in directorul 'www':
<?php // Datele pt. conectare la server $ftp_server = 'ftp.domeniu_site'; $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa conectare pe server (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { // Datele cu numele fisierului, sursa unde se afla si directorul unde va fi incarcat pe server $fisier = 'test.txt'; $sursa = 'c:/wamp/www/site/'. $fisier; $destinatie = '/www/'. $fisier; // Apeleaza functia "ftp_put()" pt. efectuarea transferului // Afiseaza mesaj de reusita sau nu if (ftp_put($conn_id, $destinatie, $sursa, FTP_BINARY)) echo "Fisierul $fisier a fost incarcat pe server"; else echo "Eroare, fisierul $fisier nu a putut fi incarcat pe server"; } // Inchide conexiunea ftp_close($conn_id); ?>
Pentru copierea (download) unui fisier de pe server pe calculatorul client se foloseste functia ftp_get(), aceasta returneaza TRUE daca transferul s-a efectuat cu succes, in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_get(conn_id, client, fisier, tip_transfer)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "client" este locatia de pe calculatorul client unde va fi copiat fisierul
- "fisier" este numele fisierului (si locatia) de pe server unde acesta se gaseste
- "tip_transfer" reprezinta modul incarcarii pe server, acesta poate lua valoarea FTP_ASCII sau FTP_BINARY
Iata un exemplu in care se descarca prin FTP un fisier de pe server pe calculatorul client:
<?php // Datele pt. conectare la server $ftp_server = 'ftp.domeniu_site'; $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa conectare pe server (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { // Datele cu numele fisierului, sursa unde se afla si directorul unde va fi copiat $fisier = 'test.txt'; $server = '/www/'. $fisier; $client = 'c:/download/'. $fisier; // Apeleaza functia "ftp_get()" pt. efectuarea transferului // Afiseaza mesaj de reusita sau nu if (ftp_get($conn_id, $client, $server, FTP_BINARY)) echo "Fisierul $fisier a fost descarcat"; else echo "Eroare, fisierul $fisier nu a putut fi descarcat"; } // Inchide conexiunea ftp_close($conn_id); ?>
Inainte de a crea un director nou prin FTP, setati directorul curent de lucru care reprezinta locatia unde doriti sa fie creat noul catalog. Pentru aceasta se foloseste functia ftp_chdir(conn_id, director); "conn_id" este id-ul conexiunii iar "director" este numele directorului care va fi setat pentru lucru.
Pentru crearea unui director pe server prin FTP se foloseste functia ftp_mkdir(), in caz de succes returneaza numele noului director creat, iar in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_mkdir(conn_id, nume_dir)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "nume_dir" este numele noului director
Iata un exemplu in care se creaza un director "test" pe server, in "www/":
<?php // Datele pt. conectare la server $ftp_server = 'ftp.domeniu_site'; $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa conectare (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { $dir = 'un_director'; // Numele noului director // Daca e setat directorul de lucru "www/" if(ftp_chdir($conn_id, '/www/')) { // Apeleaza functia "ftp_mkdir()" pt. crearea directorului // Afiseaza mesaj de reusita sau nu if (ftp_mkdir($conn_id, $dir)) echo "Directorul $dir a fost creat"; else echo "Eroare, directorul $dir nu a putut fi creat"; } } // Inchide conexiunea ftp_close($conn_id); ?>
Pe langa transferul unui fisier complet, PHP ofera si functii pentru transferul unei anumite parti din continutul unui fisier.
O functie care face acest lucru este ftp_fput(), aceasta incarca pe server continut dintr-un fisier deschis cu "fopen()", returneaza TRUE in caz de succes, iar in caz contrar returneaza FALSE. Are urmatoarea sintaxa:
ftp_fput(conn_id, destinatie, pointer_fisier, tip_transfer)
- unde "conn_id" este id-ul conexiunii returnat de "ftp_connect()"
- "destinatie" este directorul de pe server unde va fi incarcat fisierul
- "pointer_fisier" reprezinta identificatorul (pointer-ul) de fisier deschis cu "fopen()". Retine continutul de la acest pointer pana la sfarsitul fisierului.
- "tip_transfer" reprezinta modul incarcarii pe server, acesta poate lua valoarea FTP_ASCII sau FTP_BINARY
Iata un exemplu in care este preluata o parte din continutul unui fisier si transferata intr-un fisier pe server:
<?php $fisier = "test.txt"; // Fisierul care va fi deschis pt. citire // Daca fisierul a fost deschis pt. citire if ($fp = fopen($fisier, rb)) { fseek($fp, 40); // Seteaza pozitia pointer-ului in fisier // Datele pt. conectare la server $ftp_server = 'ftp.domeniu_site'; $ftp_user = 'utilizator'; $ftp_pass = 'parola'; // Seteaza Id-ul conexiunii $conn_id = ftp_connect($ftp_server); // Executa conectare (mod pasiv ca sa nu fie blocat de firewall) $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass); ftp_pasv($conn_id, true); // Verifica daca s-a reusit sau nu conectarea la server if ((!$conn_id) || (!$login_result)) { echo "Conectarea prin FTP la serverul $ftp_server pentru utilizatorul $ftp_user a iesuat."; exit; } else { $destinatie = '/www/test2.txt'; // Directorul destinatie si numele fisierului // Transfera continutul intr-un fisier nou pe server // Afiseaza mesaj de reusita sau nu if (ftp_fput($conn_id, $destinatie, $fp, FTP_BINARY)) echo 'Continutul a fost transferat'; else echo 'Eroare, continutul nu a putut fi transferat'; } // Inchide conexiunea ftp_close($conn_id); // Elibereaza memoria ocupata de deschiderea fisierului fclose($fp); } ?>
Pe langa functiile prezentate in exemplele de mai sus, PHP are si alte functii utile pentru lucrul cu fisiere si directoare prin FTP.
Iata cateva din acestea:
O lista completa cu functiile PHP pentru FTP gasiti la adresa din urmatorul link Functii PHP pentru FTP
<table><tr> <th>Title 1</th> <th>Title 2</th> </tr></table>
.some_class { line-height: 150%; }
document.getElementById("id_button").onclick = function(){ window.open("http://coursesweb.net/"); }
$ar_dir = scandir("dir_name"); var_export($ar_dir);
He will sleep there. - El va dormi acolo.
Él dormirá allí. - El va dormi acolo.