I have been working on writing a web-based ftp system, and from what I see, the problem is with your:
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
The thing is, the $source_file variable should contain the temporary name of the file, not the filename with which it is uploaded.
In my case, I have an input element of type "file", named "srcfile"
Assuming I want to name the file with the name it was uploaded with, I would use
$upload = ftp_put($conn_id, $FILES['srcfile']['name'], $FILES['srcfile']['tmp_name'], FTP_BINARY);
I have actually written a class for this sort of thing, but it is currently under testing and development.
If you really want it I suppose I can pass it to you.