Протокол FTP устроен через жопу - для передачи файла устанавливается отдельное соединение на отдельном порту, через который содержимое файла передаётся. Либо у тебя на клиенте это соединение блочится файрволом, либо оно блочится на стороне сервера. Через сторонние клиенты наподобие FileZilla файлы на этот же сервер отправляются?
через снифер посмотри обмен пакетами и что происходит. Может только соединение по управляющему порту открывается, а подключение для передачи данных нет, так же полный путь к файлу-источнику локально попробуй прописать, может функция не находит его.
а так вообще удобно ли через фтп передавать? наверняка там даже контроля прогресса нет - а если большой файл передавать - как узнать зависла программа или идёт передача файла? лучше может через post запросы передавать на php скрипт, кусочками файл (данные только надо в base64 преобразовывать и обратно при передаче), и прогресс какой нибудь рисовать сколько процентов передано.