I am designing a web-based file-managment system that can be conceptualised as 3 different servers:

1. The server that hosts the system interface (built in PHP) where users 'upload' and manage files (no actual files are stored here, it's all meta).
2. A separate staging server where files are placed to be worked on.
3. A file-store where the files are stored when they are not being worked on.

All 3 servers will be \*nix-based on the same internal network. Users, based in Windows, will use a web interface to create an initial entry for a file on Server 1. This file will be 'uploaded' to Server 3 either from the user's local drive (if the file doesn't currently exist anywhere on the network) or another network drive on the internal network. 

My question relates to the best programmatic approach to achieve what I want to do, namely:

When a user uploads a file (selecting the source via a web form) from the network, the file is transferred to Server 3 as an **inter-network transfer**, rather than passing through the user (which I believe is what would happen if it was sent as a standard HTTP form upload). I know I could set up FTP servers on each machine and attempt to FXP files between locations, but is this preferable to PHP executing a command on Server 1 (which will have global network access), to perform a cross-network transfer that way?

The second problem is that these are very large files we're talking about, at least a gigabyte or two each, and so transfers will not be instant. I need some **method of polling the status of the transfer**, and returning this to the web interface so that the user knows what is going on. 

Alternatively this upload could be left to run asyncrhonously to the user's current view, but I would still need a method to check the status of the transfer to ensure it completes. 

So, if using an FXP solution, how could polling be achieved? If using a file move/copy command from the shell, is any form of polling possible? PHP/JQuery solutions would be very acceptable. 

My final part to this question relates to windows network drive mapping. A user may map a drive (and select a file from), an arbitrarily specified mapped drive. Their G:\ may relate to \server4\some\location\therein, but presumably any drive path given to the server via a web form will only send the G:\ file path. **Is there a way to determine the 'real path' of mapped network drives?**

Any solution would be used to stage files from Server 3 to Server 2 when the files are being worked on - the emphasis being on these giant files not having to pass through the user's local machine first. 

Please let me know if you have comments and I will try to make this question more coherant if it is unclear.