What are some best practices for compressing and transferring directories from an FTP server using PHP?

When transferring directories from an FTP server using PHP, it is best practice to compress the directory before transferring it to reduce the file size and speed up the transfer process. One way to achieve this is by using PHP's ZipArchive class to create a zip archive of the directory and then transfer the zip file instead.

// Connect to FTP server
$ftp_server = 'ftp.example.com';
$ftp_user = 'username';
$ftp_pass = 'password';
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);

// Directory to compress
$dir_to_compress = '/path/to/directory';

// Create a zip archive
$zip_file = 'compressed_directory.zip';
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) === TRUE) {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir_to_compress));
    foreach ($files as $file) {
        if (!$file->isDir()) {
            $zip->addFile($file->getRealPath(), $file->getRelativePathname());
        }
    }
    $zip->close();
}

// Transfer the zip file to FTP server
if (ftp_put($conn_id, $zip_file, $zip_file, FTP_BINARY)) {
    echo "Zip file transferred successfully";
} else {
    echo "Failed to transfer zip file";
}

// Close FTP connection
ftp_close($conn_id);