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

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

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

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

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

Когда пользователь загружает файл (выбирая источник через веб-форму) из сети, файл переносится на сервер 3 как межсетевой перенос , а не через пользователя (который я считаю что произойдет, если оно будет отправлено в виде стандартной загрузки HTTP-формы). Я знаю, что могу настроить FTP-серверы на каждом компьютере и попробовать файлы FXP между местоположениями, но предпочтительнее, чтобы PHP выполнял команду на сервере 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 при работе над файлами - акцент делается на этих гигантских файлах, которые не должны сначала проходить через локальную машину пользователя.

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

3
nl ja de

2 ответы

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

enter image description here

Увеличить изображение

1.)

Сначала давайте рассмотрим проблему «межсерверной передачи», Я решил бы эту проблему, установив FileSystem с сервера 2 и 3 на сервер 1 с помощью NFS .

https://help.ubuntu.com/8.04/serverguide/network- файл-system.html

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

/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-загрузки/

3.)

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

1
добавлено

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1
добавлено
Большое спасибо за этот ответ - вы поднимаете некоторые хорошие моменты, и я благодарю вас за то, что вы подумали. Я надую вас, полагая, что кто-то не придет с каким-то мега-ответом в ближайшие пару дней :)
добавлено автор monkeymatrix, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

ntwrk
ntwrk
1 773 участник(ов)

Группа для сетевых инженеров Создатель группы: @HelloSadness Админы: @darwinggl @mxssl @Sk1f3r @blademd @gngbng

RU.SYSADMIN — Олды здесь?
RU.SYSADMIN — Олды здесь?
1 616 участник(ов)

Ламповая конференция сисадминов! Правила: http://telegra.ph/Pravila-ru-sysadmin-12-01 Список интересных групп и каналов: https://github.com/goq/telegram-list

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

Pro Telecom
Pro Telecom
884 участник(ов)

Добро пожаловать, связисты! Запрещена реклама чатов Cообщество для своих - https://www.facebook.com/groups/protelecom/ https://vk.com/telecomrf

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

pro.enterprise
pro.enterprise
346 участник(ов)

Темы обсуждения: Сервера, системы хранения данных, hardware, software, сети хранения данных, сетевое оборудование, облачные инфраструктуры и никакой политики.

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp