Поток FTP загружается в куски с помощью PHP?

Возможно ли передавать FTP-загрузку с помощью PHP? У меня есть файлы, которые нужно загрузить на другой сервер, и я могу получить доступ только к этому серверу через FTP. К сожалению, я не могу настроить время ожидания на этом сервере. Возможно ли это сделать?

В принципе, если есть способ записать часть файла, а затем добавить следующую часть (и повторить) вместо того, чтобы сразу загрузить все это, это спасло бы меня. Однако мой Гуглинг не дал мне ответа.

Возможно ли это?

Хорошо, тогда … Это может быть то, что вы ищете. Вы знакомы с локонами?

CURL может поддерживать добавление для FTP:

curl_setopt ($ ch, CURLOPT_FTPAPPEND, TRUE); // APPEND FLAG

Другой вариант – использовать потоки ftp: // / ftps: //, поскольку PHP 5 они позволяют добавлять. См. Ftp: //; ftps: // Документы. Может быть проще получить доступ.

Самый простой способ добавить фрагмент в конец удаленного файла – использовать file_put_contents с флагом FILE_APPEND :

 file_put_contents('ftp://username:pa‌​ssword@hostname/path/to/file', $chunk, FILE_APPEND); 

Если это не сработает, возможно, это связано с тем, что в PHP нет обработчиков URL-адресов .


Если вам нужен больший контроль над записью (режим передачи, пассивный режим и т. Д.) Или вы не можете использовать file_put_contents , используйте ftp_fput с дескриптором ftp_fput php://temp (или php://memory ) :

 $conn_id = ftp_connect('hostname'); ftp_login($conn_id, 'username', 'password'); $h = fopen('php://temp', 'r+'); fwrite($h, $chunk); rewind($h); // prevent ftp_fput from seeking local "file" ($h) ftp_set_option($conn_id, FTP_AUTOSEEK, false); $remote_path = '/path/to/file'; $size = ftp_size($conn_id, $remote_path); $r = ftp_fput($conn_id, $remote_path, $h, FTP_BINARY, $size); fclose($h); ftp_close($conn_id); 

(добавить обработку ошибок)