Возможно ли передавать 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:password@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);
(добавить обработку ошибок)