Как передать FTP-передачу с автономным PHP-сервером?

У меня есть сервер Ubuntu, на котором у меня есть Apache и FTP-сервер (я использую сервер Proftpd). У меня есть небольшая PHP CMS, а для базы данных я использую сервер MySQL. Это была моя серверная среда. Теперь на стороне клиента у меня есть ftp-клиент С#, который я использую для загрузки файла с FTP-сервера. Кроме того, этот клиент C# взаимодействует с моей PHP CMS.

Короче говоря, одновременно происходит два сообщения.

1. C# client and FTP server for file transfer.
2. C# client and PHP CMS for some other work.

Итак, теперь я хочу, чтобы в реальном времени (индикатор выполнения) моей передачи по ftp на одной из моих веб-страниц CMS.

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

Но прежде чем сделать это, я просто хочу знать, может ли мой PHP-сервер проверить, что делает FTP-сервер. Поскольку между ними не происходит связи, я не знаю, как это сделать? У меня есть сервер MySQL, и я знаю, что proftp может взаимодействовать с сервером MySQL, и у него есть предопределенная таблица, в которой я могу хранить все, что делает ftp-сервер. Но можно ли будет использовать его для отображения прогресса в реальном времени? Есть ли у них какой-либо другой способ сделать это или мне придется заставить моего клиента С# сделать это?


person ganesh    schedule 14.01.2013    source источник
comment
PHP-скрипт, который читает и анализирует журналы доступа PROFTPD? Это может вам помочь.   -  person user1190992    schedule 14.01.2013
comment
@user1190992: Но вам не кажется, что будет много операций ввода-вывода?   -  person ganesh    schedule 14.01.2013
comment
@ user1190992, это не сработает; журнал доступа заполняется только после завершения передачи. Таким образом, ОП не мог видеть ход загрузки.   -  person LSerni    schedule 14.01.2013
comment
Ввод/вывод с точки зрения? Если вы считаете, что PHP может быть слишком громоздким для сопоставления, вы всегда можете использовать awk, grep, используя shell_exec для xfer или журнала доступа.   -  person user1190992    schedule 14.01.2013


Ответы (1)


Из того, что вы говорите, вам вообще не нужно разговаривать с FTP-сервером (кроме загрузки файла, конечно). Ваш FTP-клиент может загрузить статус FTP-передачи в веб-сокет (и почему он не может отобразить его напрямую?), чтобы CMS восстановила его и отобразила на странице. При использовании сеансов вам даже не нужно где-либо активно сохранять эту информацию, при условии, что вызов веб-сокета правильно инициализирует файлы cookie сеанса.

В функции обратного вызова загрузки FTP-клиента просто добавьте вызов для отправки статуса выполнения на сервер. Там скриптлет сохранит его, скажем, в $_SESSION['download_status']. Затем вызов AJAX на странице CMS может периодически извлекать и отображать ее.

Не забудьте также загрузить сеанс FTP и статус исключения (передача прервана и т. д.).

person LSerni    schedule 14.01.2013