Как работает загрузка ftp в PHP? - PullRequest
2 голосов
/ 01 июля 2011

Я использую библиотеку http://phpseclib.sourceforge.net/ для загрузки файлов с использованием ftp. Теперь я не могу понять концепцию этого «как ftp обрабатывает данные файла при загрузке».

Что случилось:

Я создал форму для загрузки файла с помощью кнопки «Отправить». Когда я выбираю файл и нажимаю на «Отправить», запускается загрузчик. Но файл не поступает на сервер. файл и нажмите на сервер в зависимости от размера пакета, указанного в phpseclib.

Кто-нибудь объяснил мне, что я неправильно понял или что происходит, когда загрузчик отображается в браузере?

EDIT:

Загрузка файла не имеет проблем. Единственная причина, по которой он вызывается так поздно. Так что при загрузке php перемещает файл на сервер в некоторые временные каталоги. Если так, почему мне нужно перейти на загрузку FTP.

Я протестировал файлы размером 100 МБ. Файлы загружены. Каково мое ожидание, почему оно не запускается сразу после нажатия кнопки отправки?

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

У вас есть enctype="multipart/form-data" для вашей формы?

В html формам для загрузки файла необходим атрибут enctype="multipart/form-data". Форма обычно выглядит так:

<form id="form_id" enctype="multipart/form-data" method="POST">
<input type="file" name="file" />
<input type="submit" name="submit" value="submit" />
</form>
1 голос
/ 10 июля 2011

Отличный вопрос, вы имеете дело с 2 транзакциями здесь. Первая транзакция помещает файл в папку на вашем веб-сервере. Это использует HTTP в качестве транспорта через метод POST (также, вероятно, самая медленная часть этой транзакции).

Как только начальная загрузка на стороне клиента будет завершена, файл будет сохранен на вашем веб-сервере, где теперь можно передавать сценарий S / FTP.

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

Ваш процесс в настоящее время.

  1. Пользователь A загружает файл через HTTP с помощью веб-страницы, которую вы размещаете.
  2. Пользователь A ждет завершения загрузки файла, прежде чем закрывать свой браузер.
  3. Файл сохраняется в каталоге, указанном в сценарии загрузки.
  4. Сценарий S / FTP считывает файл и устанавливает соединение с внешним сервером S / FTP и начинает передачу файла на этот сервер.

Если шаг 4 является избыточным, то сценарий S / FTP вообще не требуется, если только вы не хотели передавать с клиента через S / FTP.

Ваше намерение.

  1. Пользователь A загружает файл через S / FTP с помощью браузера S / FTP-клиента.
  2. Пользователь A ожидает завершения загрузки файла.
  3. Файл сохраняется в каталоге, указанном в сценарии загрузки.

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

Клиент на базе Flex FTP

Вопрос клиента FTP на основе Flex в стеке Exchange

Реализация клиента S / FTP на стороне сервера с PHPSecLib.

SFTP.php в Gist (для номеров строк и выделения)

Оригинальный PHPSec SFTP.php

Я скопировал оригинал через сайт Sourceforge в Gist, чтобы вы могли использовать номера строк в качестве руководства. Библиотека SFTP ожидает либо полный путь к файлу (т.е. / tmp / somefilehere), либо допустимый ресурс PHP файла . Как и в случае, возвращаемом fopen $fp = @fopen('/tmp/somefilehere', 'rb');, см. Пример строки 1132 в gist.

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

Возможно, вы хотите инициировать транзакцию S / FTP через ваш веб-браузер. Это возможно только с обычными языками сценариев, такими как PHP / Python или Ruby. Вы можете использовать S / FTP из браузера с помощью Flash, Flex или Java, а также, возможно, с некоторыми технологиями Windows.

1 голос
/ 05 июля 2011

Я в замешательстве.Можете ли вы опубликовать соответствующий код PHP, который показывает

  1. вашу обработку запроса POST, который загружает файл
  2. , как вы вызываете библиотеку FTP для инициации передачи FTP

Я думаю, что происходит следующее: ваш пользователь загружает файл на ваш веб-сервер, затем вы запускаете FTP с вашего веб-сервера на FTP-сервер.Здесь есть 2 загрузки;1 через HTTP и 1 через FTP.Вы не увидите загрузку по FTP, пока не завершится загрузка по HTTP.

...