par
sadeq » 24 sept. 2013, 21:08
Bonjour, c'est une erreur souvent rencontrée due à l'inversion des paramètres fichier_distant et fichier_local de la fonction ftp_put().
La syntaxe est :
bool ftp_put ( resource $ftp_stream , string $remote_file , string $local_file , int $mode [, int $startpos = 0 ] )
1. Le paramètre
$remote_file doit être le nom du fichier qui sera enregistré sur le site distant accédé par FTP. Il doit contenir le chemin complet (dossier+nom du fichier destination). Dans ton cas il s'agit de
$_FILES['up']['name'] le nom d'origine du fichier uploadé que tu dois précédé par le nom du dossier cible que tu as nommé
'./Test' dans ton programme.
2. Le paramètre
$local_file est le nom du fichier temporaire qui a été uploadé et qui se trouve dans
$_FILES['up']['tmp_name']
Tu as compris donc qu'il faut inverser l'ordre des variables $file1 et $file2 dans la fonction ftp_put(). Correction :
$ftp_put = ftp_put($ftp, $file2, $file1, FTP_BINARY);
Bon, j'ai utilisé le mode binaire
FTP_BINARY pour bien transmettre le fichiers binaires comme Word, Excel, ...
Pour information aussi je pense que le test d'existence du dossier ftp cible avec la fonction is_dir() ne fonctionnera par pour un dossier distant (FTP) il faut donc virer ce
IF (is_dir())
Pour correction voici le même programme réadapté :
<form method='Post' enctype='multipart/form-data'>
<h1>FTP</h1>
<li>Telecharger fichier : <input type='file' name='up'></Input></li>
<li><input type='submit' name='upl' Value='Upload'></Input></li>
</form>
<?php
if(isset($_POST['upl']) && $_FILES['up'] != "") {
$ftp = ftp_connect("******************", 21);
if ($ftp) {
echo "<li>Connexion : OK .....</li>";
$ftp_login = ftp_login($ftp, "*******************", "*****************");
if ($ftp_login) {
echo "<li>Login : OK .....</li>";
if(ftp_pasv($ftp,true)) {
echo "<li>Mode passif : OK .....</li>";
$dir = './Test/';
$file_to_upload = $_FILES['up']['tmp_name'];
$file_name_to_save = $dir.$_FILES['up']['name'];
echo '<li>Nom Fichier local a telecharger (temp) : '.$file_to_upload.'</li>';
echo '<li>Nom Fichier distant de sauvegarde : '.$file_name_to_save.'</li>';
//ecriture binaire recommandee
$ftp_put = ftp_put($ftp, $file_name_to_save, $file_to_upload, FTP_BINARY);
if ($ftp_put) {
echo "<li>Telechargement : OK .....</li>";
} else {
echo "<li>Telechargement : Pas OK .....</li>";
}
} else {
echo "<li>Erreur mode passif</li>";
}
} else {
echo "<li>Login : Pas OK</li>";
}
} else {
echo "<li>Connexion OK</li>";
}
} else {
echo "<li>Choisir un fichier</li>";
}
?>
Bonjour, c'est une erreur souvent rencontrée due à l'inversion des paramètres fichier_distant et fichier_local de la fonction ftp_put().
La syntaxe est :
[quote]bool ftp_put ( resource $ftp_stream , string $remote_file , string $local_file , int $mode [, int $startpos = 0 ] )[/quote]
1. Le paramètre [b]$remote_file[/b] doit être le nom du fichier qui sera enregistré sur le site distant accédé par FTP. Il doit contenir le chemin complet (dossier+nom du fichier destination). Dans ton cas il s'agit de [b]$_FILES['up']['name'][/b] le nom d'origine du fichier uploadé que tu dois précédé par le nom du dossier cible que tu as nommé [b]'./Test'[/b] dans ton programme.
2. Le paramètre [b]$local_file[/b] est le nom du fichier temporaire qui a été uploadé et qui se trouve dans [b]$_FILES['up']['tmp_name'][/b]
Tu as compris donc qu'il faut inverser l'ordre des variables $file1 et $file2 dans la fonction ftp_put(). Correction :
[php]$ftp_put = ftp_put($ftp, $file2, $file1, FTP_BINARY);[/php]
Bon, j'ai utilisé le mode binaire [b]FTP_BINARY[/b] pour bien transmettre le fichiers binaires comme Word, Excel, ...
Pour information aussi je pense que le test d'existence du dossier ftp cible avec la fonction is_dir() ne fonctionnera par pour un dossier distant (FTP) il faut donc virer ce [b]IF (is_dir())[/b]
Pour correction voici le même programme réadapté :
[php]<form method='Post' enctype='multipart/form-data'>
<h1>FTP</h1>
<li>Telecharger fichier : <input type='file' name='up'></Input></li>
<li><input type='submit' name='upl' Value='Upload'></Input></li>
</form>
<?php
if(isset($_POST['upl']) && $_FILES['up'] != "") {
$ftp = ftp_connect("******************", 21);
if ($ftp) {
echo "<li>Connexion : OK .....</li>";
$ftp_login = ftp_login($ftp, "*******************", "*****************");
if ($ftp_login) {
echo "<li>Login : OK .....</li>";
if(ftp_pasv($ftp,true)) {
echo "<li>Mode passif : OK .....</li>";
$dir = './Test/';
$file_to_upload = $_FILES['up']['tmp_name'];
$file_name_to_save = $dir.$_FILES['up']['name'];
echo '<li>Nom Fichier local a telecharger (temp) : '.$file_to_upload.'</li>';
echo '<li>Nom Fichier distant de sauvegarde : '.$file_name_to_save.'</li>';
//ecriture binaire recommandee
$ftp_put = ftp_put($ftp, $file_name_to_save, $file_to_upload, FTP_BINARY);
if ($ftp_put) {
echo "<li>Telechargement : OK .....</li>";
} else {
echo "<li>Telechargement : Pas OK .....</li>";
}
} else {
echo "<li>Erreur mode passif</li>";
}
} else {
echo "<li>Login : Pas OK</li>";
}
} else {
echo "<li>Connexion OK</li>";
}
} else {
echo "<li>Choisir un fichier</li>";
}
?>[/php]