I haven’t used get or put contents before, I’ve used cURL (which I’ve moved away from) and ftp_get(). I can only recommend to stay away from cURL as it can be finicky on certain files.
I’m a bit confused: what do you mean by “download?” Do you mean from server to desktop?
I don’t know if this is the “correct” way to do it but it works for me:
// push to download the zip
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.$downloadname.'"');
readfile($zipname);