2 votes

Stream FTP upload en morceaux avec PHP ?

Est-il possible d'effectuer un téléchargement FTP en streaming avec PHP ? J'ai des fichiers à télécharger sur un autre serveur, et je ne peux accéder à ce serveur que par FTP. Malheureusement, je ne peux pas augmenter le délai d'attente sur ce serveur. Est-il possible de le faire ?

En gros, s'il existe un moyen d'écrire une partie d'un fichier, puis d'ajouter la partie suivante (et de répéter) au lieu de télécharger le tout en une seule fois, cela me sauverait. Cependant, mes recherches sur Google ne m'ont pas apporté de réponse.

Est-ce réalisable ?

1voto

Brian Points 4114

OK alors... C'est peut-être ce que vous cherchez. Connaissez-vous Curl ?

CURL peut supporter l'ajout de données pour FTP :

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

L'autre option est d'utiliser les flux ftp:// / ftps://, depuis PHP 5 ils permettent l'ajout. Voir ftp:// ; ftps:// Docs. Cela pourrait être plus facile d'accès.

0voto

Martin Prikryl Points 4584

La manière la plus simple d'ajouter un chunk à la fin d'un fichier distant est d'utiliser file_put_contents avec FILE_APPEND drapeau :

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

Si cela ne fonctionne pas, c'est probablement parce que vous n'avez pas Activation des wrappers d'URL en PHP .


Si vous avez besoin d'un plus grand contrôle sur l'écriture (mode transfert, mode passif, etc.), ou si vous ne pouvez pas utiliser l'option file_put_contents utilisez le ftp_fput avec une poignée pour le php://temp (ou le php://memory ) flux :

$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);

(ajouter la gestion des erreurs)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X