Межсетевые передачи файлов с использованием PHP с опросом

Я разрабатываю веб-систему управления файлами, которую можно концептуализировать как 3 разных сервера:

1. Сервер, на котором размещен системный интерфейс (встроенный PHP), где пользователи загружают и управляют файлами (здесь нет реальных файлов, это все мета).
2. Отдельный промежуточный сервер, на котором размещаются файлы для работы.
3. Хранилище файлов, в котором файлы хранятся, когда они не обрабатываются.

Все 3 сервера будут * nix-основаны на одной и той же внутренней сети. Пользователи, созданные в Windows, будут использовать веб-интерфейс для создания начальной записи для файла на сервере 1. Этот файл будет «загружен» на сервер 3 либо с локального диска пользователя (если файл в настоящее время не существует в любом месте сеть) или другой сетевой диск во внутренней сети.

Мой вопрос связан с лучшим программным подходом к достижению того, что я хочу сделать, а именно:

Когда пользователь загружает файл (выбирая источник через веб-форму) из сети, файл переносится на сервер 3 как  **межсетевой перенос** , а не через пользователя (который я считаю что произойдет, если оно будет отправлено в виде стандартной загрузки HTTP-формы). Я знаю, что могу настроить FTP-серверы на каждом компьютере и попробовать файлы FXP между местоположениями, но предпочтительнее, чтобы [PHP](/tag5740) выполнял команду на сервере 1 (которая будет иметь глобальный доступ к сети), чтобы таким образом выполнить межсетевую передачу?

Вторая проблема заключается в том, что это очень большие файлы, о которых мы говорим, по крайней мере, по одному гигабайту или двум, и поэтому передача не будет мгновенной. Мне нужен  **метод опроса статуса передачи**  и возврат его к веб-интерфейсу, чтобы пользователь знал, что происходит.

В качестве альтернативы, эта загрузка может быть оставлена без асинхронной работы с текущим представлением пользователя, но мне все равно нужен метод проверки состояния передачи, чтобы убедиться в ее завершении.

Итак, если вы используете решение FXP, как можно добиться опроса? Если используется команда перемещения/копирования файла из оболочки, возможна ли какая-либо форма опроса? Решения PHP/JQuery были бы очень приемлемыми.

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?**

Любое решение будет использоваться для создания файлов с сервера 3 на сервер 2 при работе над файлами - акцент делается на этих гигантских файлах, которые не должны сначала проходить через локальную машину пользователя.

Пожалуйста, дайте мне знать, если у вас есть комментарии, и я постараюсь сделать этот вопрос более последовательным, если неясно.

Насколько я знаю (и я мог ошибаться), нет стандартного способа определить путь UNC сопоставленного диска из браузера.

Единственный способ сделать это - иметь какой-то контроль на веб-странице. Может быть ActiveX или возможно вспышка. Я видел, что ActiveX делает это, но не flash.

Раньше при разработке веб-систем, которым необходимо знать путь UNC для сопоставленного диска пользователя, мне пришлось иметь перевод диска на UNC-путь, хранящийся на стороне сервера. У меня была роскошь, хотя я знал, какой диск будет отображаться на пути UNC. Если пользователь может установить произвольные пути, это явно не сработает.

Хорошо, поскольку я откладываю и избегаю реальной работы, я подумал об этом.

Я предваряю это, сказав, что я никоим образом не специалист по Linux, и система, которую я собираюсь описать, только что придумана с моей точки зрения и не то, что вы хотели бы использовать в любом виде производства. Однако это может помочь вам на правильном пути.

Итак, у вас есть 3 сервера, сервер интерфейса (LAMP stack, который я предполагаю?), Ваш сервер промежуточного уровня и ваш сервер хранилища файлов. У вас также будут клиентские машины и сетевые ресурсы. Для целей этого проекта ваши сетевые акции размещаются на nix-блоках, из которых может храниться ваш файловый магазин.

Вы создали бы свой внешний сайт, который отслеживает и хранит информацию о файлах и т. Д. Это также будет содержать сведения о том, какие файлы копируются, которые находятся в разделе «Стадии» и т. Д.

Вам также потребуется какая-то служба, работающая на сервере хранилища файлов. Я назову это Службой копирования файлов. Это будет отвечать за копирование файлов с ваших серверов, на которых размещаются сетевые ресурсы.

Теперь у вас все еще есть проблема с тем, как вы определяете, на каком пути находится файл пользователей. Если вы можете запретить пользователям сопоставлять свои собственные диски и заставить их использовать согласованные буквы дисков, вы можете сохранить перевод буквы диска на UNC-путь на сервере. Если вы не можете, я дам вам понять это. Если вы находитесь в домене Windows, вы можете принудительно сопоставить диски с помощью групповых политик.

В любом случае, процесс для системы будет работать примерно так.

1. Пользователь переходит в систему и выбирает файл
2. Сервер интерфейса принимает путь к файлу и вызывает службу копирования файлов на сервере хранилища файлов
3. Служба копирования файлов подключается к серверу, на котором размещается файл, и запускает копию. Если они все nix-боксы, вы можете легко использовать что-то вроде SCP. Теперь я на самом деле не посмотрел, как это сделать, но я был бы очень удивлен, если вы не сможете получить общее количество процентов от SCP, поскольку оно копирует. В результате этого выполнения Служба копирования файлов будет обновлять базу данных на интерфейсном сервере с помощью того, как копия делает это, и пользователь может видеть это с сервера интерфейса.

Служба копирования файлов также может использоваться для перемещения файлов из Файлового хранилища на промежуточный сервер.

Как я сказал, очень продумано. Вышеупомянутое будет работать, но все зависит от того, как настроены ваши системы и т. Д.

Сказав все это, должно быть программное обеспечение, которое будет делать это там. Вы посмотрели?



Если я прав, эта артектрия:

![enter image description here](https://i.stack.imgur.com/zeeuq.png)

 [Увеличить изображение](http://i45.tinypic.com/30cavbs.png) 

1.)

Сначала давайте рассмотрим проблему «межсерверной передачи»,
Я решил бы эту проблему, установив FileSystem с сервера 2 и 3 на сервер 1 с помощью  [NFS](https://en.wikipedia.org/wiki/Network_File_System) .

 [https://help.ubuntu.com/8.04/serverguide/network- файл-system.html](https://help.ubuntu.com/8.04/serverguide/network-file-system.html) 

Таким образом, [PHP](/tag5740) может напрямую хранить файлы в файловой системе и не должен знать, на каком сервере находятся файлы.

```
/etc/exports
of Server 2 + 3
/directory/with/files 192.168.IPofServer.1 (rw,sync)

exportfs -ra

/etc/fstab 
of Server 1
192.168.IPofServer.2:/var/lib/data/server2/ /directory/with/files  nfs rsize=8192,wsize=8192,timeo=14,intr
192.168.IPofServer.3:/var/lib/data/server3/ /directory/with/files  nfs rsize=8192,wsize=8192,timeo=14,intr

mount -a

```

2.)

Получите загрузочный ход для реальных больших файлов,
вот некоторые возможности иметь индикатор выполнения для HTTP-загрузок.
Но для функции возобновления вам придется использовать Flash-плагин.

<http://fineuploader.com/#demo>

<https://github.com/valums/file-uploader>

или вы можете построить его самостоятельно, используя расширение apc

 [http://www.amwsites.com/blog/2011/01/use-a-combination-of-jquery-php-apc-uploadprogress-to-show-progress-bar-during -an-загрузки/](http://www.amwsites.com/blog/2011/01/use-a-combination-of-jquery-php-apc-uploadprogress-to-show-progress-bar-during-an-upload/)

3.)

Позволяет загружать файлы сервера из сетевого диска.
Это я попытаюсь с помощью java-апплета вывести реальный сетевой путь и отправить его на сервер, чтобы сервер мог получить файл в фоновом режиме.
Но я никогда не думал об этом раньше и не получил дополнительной информации.