par
Kapoue » 10 mars 2015, 10:54
Bonjour @rthur,
De bon matin, je me suis attaqué aux étapes que tu m'as données.
J'ai fait une page simple avec juste le code pour découper le fichier et envoyer chaque morceau à la suite de ce qui a été envoyé :
Code : Tout sélectionner
$TailleFichier = filesize($NomFichier);
$Depart = 0;
$Connection = ftp_connect(FTPSERVEUR);
ftp_login($Connection, FTPUTILISATEUR, FTPMOTDEPASSE);
ftp_chdir($Connection, FTPDOSSIER);
ftp_pasv($Connection, true);
do
{
$NomFichierTemp = TEMP."/fichiertemp.tmp";
$FichierTemp = fopen($NomFichierTemp, "w");
$Fichier = fopen($NomFichier, "r");
fseek($Fichier, $Depart);
$Temp = fread($Fichier, TAILLEFICHIERMAX);
fwrite($FichierTemp, $Temp);
fclose($Fichier);
fclose($FichierTemp);
$Retour = ftp_put($Connection, $NomFichier, $NomFichierTemp, FTP_BINARY, $Depart) ? "oui" : "non";
echo "envoi a partir de ".$Depart." : ".$Retour." ".ftp_size($Connection, $NomFichier)."<br />";
$Depart += TAILLEFICHIERMAX;
}
while ($Depart < $TailleFichier && $Retour != "non");
echo $Retour ? "oui" : "non";
ftp_close($Connection);
Et j'ai fait le test sur 2 serveurs différents (juste en changeant la définition de FTPSERVEUR, FTPUTILISATEUR, FTPMOTDEPASSE et FTPDOSSIER.
Sur le premier serveur FTP (sous Windows), la boucle s'arrête la 3e fois : la première fois, le fichier est créé et fait bien 100ko, la 2 fois la fonction ftp_put a bien fonctionné mais le fichier fait toujours 100ko, la 3 fois ftp_put renvoie une erreur et pour cause, ça demande d'écrire à partir de 200ko sur un fichier qui fait 100ko.
Sur le 2 serveur FTP (sous Linux), la boucle s'arrête à la fin du gros fichier à découper, chaque ligne indique que la fonction ftp_put a fonctionné mais le fichier toujours 100ko ce qui indique que la fonction ne fait rien. Déjà en fonction du serveur FTP, la même fonction est interprettée différemment.
J'ai testé en recupérant avec filezilla le fichier envoyé et en le comparant via un éditeur hexadecimal avec le fichier temp, si je laisse 0 dans le dernier paramètre (startpos) de la fonction ftp_put, le fichier envoyé est bien identique au dernier fichier temp. Par contre si je mets autre chose que 0 dans ce paramètre, c'est le premier morceau envoyé qui est sur le serveur FTP au lieu du dernier.
Je vais fouiller dans le code de la fonction ftp_put via le lien que tu m'as passé afin de voir ce qu'elle fait, juste pour voir.
Et je crois que je vais finir par me plonger dans les commandes FTP que j'ignore complètement et faire appel à la fonction ftp_raw.
A suivre...
Bonjour @rthur,
De bon matin, je me suis attaqué aux étapes que tu m'as données.
J'ai fait une page simple avec juste le code pour découper le fichier et envoyer chaque morceau à la suite de ce qui a été envoyé :
[code]
$TailleFichier = filesize($NomFichier);
$Depart = 0;
$Connection = ftp_connect(FTPSERVEUR);
ftp_login($Connection, FTPUTILISATEUR, FTPMOTDEPASSE);
ftp_chdir($Connection, FTPDOSSIER);
ftp_pasv($Connection, true);
do
{
$NomFichierTemp = TEMP."/fichiertemp.tmp";
$FichierTemp = fopen($NomFichierTemp, "w");
$Fichier = fopen($NomFichier, "r");
fseek($Fichier, $Depart);
$Temp = fread($Fichier, TAILLEFICHIERMAX);
fwrite($FichierTemp, $Temp);
fclose($Fichier);
fclose($FichierTemp);
$Retour = ftp_put($Connection, $NomFichier, $NomFichierTemp, FTP_BINARY, $Depart) ? "oui" : "non";
echo "envoi a partir de ".$Depart." : ".$Retour." ".ftp_size($Connection, $NomFichier)."<br />";
$Depart += TAILLEFICHIERMAX;
}
while ($Depart < $TailleFichier && $Retour != "non");
echo $Retour ? "oui" : "non";
ftp_close($Connection);
[/code]
Et j'ai fait le test sur 2 serveurs différents (juste en changeant la définition de FTPSERVEUR, FTPUTILISATEUR, FTPMOTDEPASSE et FTPDOSSIER.
Sur le premier serveur FTP (sous Windows), la boucle s'arrête la 3e fois : la première fois, le fichier est créé et fait bien 100ko, la 2 fois la fonction ftp_put a bien fonctionné mais le fichier fait toujours 100ko, la 3 fois ftp_put renvoie une erreur et pour cause, ça demande d'écrire à partir de 200ko sur un fichier qui fait 100ko.
Sur le 2 serveur FTP (sous Linux), la boucle s'arrête à la fin du gros fichier à découper, chaque ligne indique que la fonction ftp_put a fonctionné mais le fichier toujours 100ko ce qui indique que la fonction ne fait rien. Déjà en fonction du serveur FTP, la même fonction est interprettée différemment.
J'ai testé en recupérant avec filezilla le fichier envoyé et en le comparant via un éditeur hexadecimal avec le fichier temp, si je laisse 0 dans le dernier paramètre (startpos) de la fonction ftp_put, le fichier envoyé est bien identique au dernier fichier temp. Par contre si je mets autre chose que 0 dans ce paramètre, c'est le premier morceau envoyé qui est sur le serveur FTP au lieu du dernier.
Je vais fouiller dans le code de la fonction ftp_put via le lien que tu m'as passé afin de voir ce qu'elle fait, juste pour voir.
Et je crois que je vais finir par me plonger dans les commandes FTP que j'ignore complètement et faire appel à la fonction ftp_raw.
A suivre...