Building a FTP client library with PHP

In my daily work I need to connect very often to FTP servers. Put files, read, list and things like that. I normally use the standard PHP functions for Ftp it’s pretty straight forward to use them. Just enable it within our installation (–enable-ftp) and it’s ready to use them. But last Sunday it was raining again and I start with this simple library.

Lets connect to a FTP server, switch to passive mode, put a file from one real file stored in our local filesystem and delete it.

[sourcecode language=”php”]
use FtpLib\Ftp,
FtpLib\File;

list($host, $user, $pass) = include __DIR__ . "/credentials.php";

$ftp = new Ftp($host, $user, $pass);
$ftp->connect();
$ftp->setPasv();

$file = $ftp->putFileFromPath(__DIR__ . ‘/fixtures/foo’);
echo $file->getName();
echo $file->getContent();
$file->delete();
[/sourcecode]

Now the same, but without a real file. We are going to create the file on-the-fly from one string:

[sourcecode language=”php”]
use FtpLib\Ftp,
FtpLib\File;

list($host, $user, $pass) = include __DIR__ . "/credentials.php";

$ftp = new Ftp($host, $user, $pass);
$ftp->connect();
$ftp->setPasv();

$file = $ftp->putFileFromString(‘bar’, ‘bla, bla, bla’);
echo $file->getName();
echo $file->getContent();
$file->delete();
[/sourcecode]

We also can create directories, change the working directory and delete folders in the FTP server with a fluent interface (I love fluent interfaces, indeed):

[sourcecode language=”php”]
$ftp->mkdir(‘directory’)
->chdir(‘directory’)
->putFileFromString(‘newFile’, ‘bla, bla’)
->delete();

$ftp->rmdir(‘directory’);
[/sourcecode]

And finally we can iterate files in the FTP (I must admit that this feature was the main purpose of the library)

[sourcecode language=”php”]
$ftp->getFiles(function (File $file) use ($ftp) {
switch($file->getName()) {
case ‘file1’:
$file->delete();
break;
case ‘file2’:
$ftp->mkdir(‘backup’)->chdir(‘backup’)->putFileFromString($file->getName(), $file->getContent());
break;
}
});
[/sourcecode]

And that’s all. You can find the library in github and you also can use it with composer.

[sourcecode language=”php”]
"gonzalo123/ftplib": "dev-master"
[/sourcecode]

You can also see usage examples within the unit tests