PHP - загрузка с URL и загрузка через FTP - PullRequest
2 голосов
/ 16 июня 2011

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

Идея состоит в том, что мы загружаем один из наших отчетов, загружая их с URL-адреса (файл CSV),затем отправьте это клиенту через FTP / S.Я знаю, что могу сделать это в скриптах bash, используя wget & ftp - но мне нужно добавить это через веб-интерфейс, чтобы PHP был лучшим способом продвижения вперед.

Поскольку это фоновая задача, я могу продлить тайм-аутыи т. д.

Я также знаю, что могу использовать fopen для загрузки и сохранения файла, затем найти его и загрузить с помощью библиотеки PHP FTP.Просто ищите способ загрузки с помощью fopen, сразу же сохраняйте данные в памяти для загрузки.

Любая помощь оценена заранее!

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Чтобы получить данные из URL, у вас есть несколько вариантов. Вы говорите, что хотите, чтобы данные в памяти передавались только на хост FTP.

Один из подходов (который я считаю самым простым в использовании, но не хватает надежности и обработки ошибок) - file_get_contents()

Пример:

$url = 'http://www.domain.com/csvfile';
$data = file_get_contents($url);

Теперь у вас есть данные CSV в $data, как перенести их на FTP-сервер.

Опять же, самый простой способ сделать это - использовать встроенные потоковые обертки, как в приведенном выше примере get. (Обратите внимание, что для этого требуется PHP 4.3.0)

Просто создайте строку подключения следующим образом.

$protocol = 'ftps';
$hostname = 'ftp.domain.com';
$username = 'user';
$password = 'password';
$directory = '/pub';
$filename = 'filename.csv';
$connectionString = sprintf("%s://%s:%s@%s%s/%s",
    $protocol,$username,$hostname,
    $password,$directory,
    $filename);


file_put_contents($connectionString,$data);

Ознакомьтесь с инструкцией по ftp

Если это не работает, есть другие варианты.

Вы можете использовать curl для получения данных и FTP Extension для их отправки.

1 голос
/ 16 июня 2011

Чтобы не сохранять файл на диск и «загружать сразу», т. Е. Начинать передачу на FTP, как только будет загружен первый блок данных?

Попробуйте:1005 * Вам понадобится FTP-сервер и клиентская библиотека, поддерживающие возобновление загрузки

...