ftp_put() can display confusing warning messages as it returns one line of the remote server's response which may be multi lined.
If you're transferring large amounts of files note that some file systems only support up to 2000 files per directory. This had me stumped for a while.