Как показано в другом ответе, file_put_contents
с флагом FILE_APPEND
является самым простым решением для добавления фрагмента в конец удаленного файла:
file_put_contents('ftp://username:password@hostname/path/to/file', $chunk, FILE_APPEND);
Если это не работает, возможно, это связано с тем, что в PHP не включены упаковщики URL .
Хотя, если у вас действительно есть соответствующая локальная копия файла, просто с новым добавленным содержимым, проще использовать «скрытую» функцию ftp_put
, FTP_AUTORESUME
$conn_id = ftp_connect('hostname');
ftp_login($conn_id, 'username', 'password');
ftp_pasv($conn_id, true);
$remote_path = '/path/to/file';
$local_path = 'file';
ftp_put($conn_id, $remote_path, $local_file, FTP_BINARY, FTP_AUTORESUME);
ftp_close($conn_id);
(добавить обработку ошибок)
Если у вас нет соответствующего локального файла, т.е. вы загружаете кусок содержимого из памяти и вам нужен больший контроль над записью (режим передачи, пассивный режим и т. Д.), Чем вы получаете с помощью file_put_contents
, используйте ftp_fput
с ручкой для потока php://temp
(или php://memory
) :
$conn_id = ftp_connect('hostname');
ftp_login($conn_id, 'username', 'password');
ftp_pasv($conn_id, true);
$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);
(снова добавьте обработку ошибок)