PHP en FTP

Soms kan het nodig zijn dat je door middel van PHP een FTP verbinding maakt. Echter om dit te kunnen doen moet je eerst een en ander uitzoeken. Dat heb ik nu alvast gedaan en hier beschreven.

Verbinding maken

Voordat je commando's op de server kunt uitvoeren is het nodig om verbinding te maken met de server. Dat kan vrij eenvoudig gedaan worden op deze manier:

  1. $server = 'ftp.server.com';
  2. $gebruikersnaam = 'username';
  3. $wachtwoord = 'password';
  4. // Zet de verbinding op. Let op, dit commando moet worden opgeslagen worden in een variabele. Later gaat deze nog nodig zijn.
  5. $conn_id = ftp_connect($server);
  6.  
  7. // Dit is het daadwerkelijke inloggen
  8. $login_result = ftp_login($conn_id, $gebruikersnaam, $wachtwoord);

Wanneer er passive mode gebruikt moet worden om een goede verbinding opzetten, moet de functie ftp_pasv worden aangeroepen:

  1. ftp_pasv( $conn_id, true );

Bestanden uitlezen

Nu er verbinding is gemaakt kan er worden gekeken welke bestanden er aanwezig zijn. Dat kan met de functie ftp_nlist. Deze functie geeft een array terug van alle bestanden in de opgegeven map. Let op! Er wordt hierbij geen onderscheid gemaakt tussen mappen en bestanden!

  1. $file_list = ftp_nlist($conn_id, '.');
  2. print_r( $file_list );

Dit kan de volgende array als resultaat geven:

  1. (
  2.     [0] => ..
  3.     [1] => domains
  4.     [2] => Maildir
  5.     [3] => public_html
  6.     [4] => imap
  7.     [5] => .
  8. )

van map veranderen

Helaas heeft PHP geen FTP functie om te kijken of het bestand een map is. Dat kan alleen gedaan worden door proberen de huidige map te veranderen. Wanneer dat niet lukt is het bestand dus een gewoon bestand en geeft de functie false terug. Zodoende kan met een if/else gekeken worden of het bestand een map is of niet. Met de functie ftp_chdir kan van map veranderd worden.

  1. if(@ftp_chdir($conn_id, $mapnaam)) {
  2.         echo $mapnaam . ' is een map!';
  3. } else {
  4.         echo $mapnaam . ' is geen map, maar een bestand!';
  5. }

Wanneer omhoog gebladerd moet worden kan de functie ftp_cdup gebruikt worden:

  1. ftp_cdup($conn_id);

Bestand uploaden

Een bestand upload kan door middel van de functie ftp_put. Er moet hierbij wel aangegeven worden of een bestand in ASCII of in BINARY mode geüpload moet worden. Ook mag het bestand op de server nog niet bestaan.

  1. // Wanneer het bestand in binary is gebruik dan FTP_BINARY in plaast van FTP_ASCII
  2. ftp_put($conn_id, 'bestands_naam_op_ftp_server.txt', 'bestands_naam_op_lokale_server.txt', FTP_ASCII);

Bestand downloaden

Een bestand downloaden gaat bijna hetzelfde als een bestand uploaden. Gebruik voor het downloaden de functie ftp_get. Ook hier moet weer worden aangegeven of het bestand ASCII of BINARY is.

  1. ftp_get($conn_id, 'bestand_naam_zoals_deze_op_de_lokale_server_opgeslagen_moet_worden.txt', 'bestands_naam_op_de_ftp_server.txt', FTP_ASCII);

Map aanmaken

Een map aanmaken is vrij eenvoudig, en wordt gedaan met behulp van de functie ftp_mkdir. Deze accepteert 2 argumenten, het connectie ID en de naam van de aan te maken map.

  1. ftp_mkdir($conn_id, 'nieuwe_map_naam');

Meer functies

Er zijn nog een groot aantal functies beschikbaar. Deze zijn te vinden op php.net.