Bonjour à tous et à toute,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Etant en stage actuellement, je me dirige vers vous car je ne sais plus quoi faire, je suis chargé de créer un formulaire permettant à un utilisateur quelquonque d'uploader une image de son ordi, sur un serveur ftp. Le code ci-dessous me permet la connexion au serveur qui a priori marche avec les tests que j'ai fais, puis récupère le fichier grâce à l'input type file, et est censé l'envoyer sur le serveur ftp.

<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"  enctype="multipart/form-data" method="post">
 <div class="form-row">
<div class="form-group">
    <label for="exampleFormControlFile1">Votre Image</label>
    <input  name="fichier" type="file">
  </div>

  <button type="submit">Envoyer</button>
</form>
</div>

<?php
//<?php echo $_SERVER['SCRIPT_NAME'];
if(isset($_FILES['fichier'])){

$ftp_server = "****";
$ftp_user_name = "****";
$ftp_user_pass = "****";
$ftp_port = "21";
$destination_file = "/public_html/";
$source_file = $_FILES['fichier']['name'];

// set up basic connection
$conn_id = ftp_connect($ftp_server,$ftp_port);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// ftp passive cmd
ftp_pasv($conn_id, true);

// check connection
if ((!$conn_id) || (!$login_result)) {
    echo "FTP connection has failed!";
    echo "Attempted to connect to $ftp_server for user $ftp_user_name";
    exit;
} else {
    echo "Connected to $ftp_server, for user $ftp_user_name";
}

// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

// check upload status
if (!$upload) {
echo "FTP upload has failed!";
} else {
echo "Uploaded $source_file to $ftp_server as $destination_file";
}

// close the FTP stream
ftp_close($conn_id);}

?>

Ce que je veux

Comme je l'ai dit plus haut, l'objectif est que lorsqu'un utilisateur upload une image avec l'input type file, il faut que quand il clique sur "envoyer" cette image soit envoyer sur le serveur ftp correspondant

Ce que j'obtiens

Le soucis c'est que la méthode ftp_put() me pose un soucis car j'ai le message d'erreur suivant "ftp_put(): failed to open stream: No such file or directory".

Merci d'avance pour votre aide.

2 réponses


Bonjour,

Est-tu sur de l'existance de ton fichier source $source_file ?

Je te propose de passer ta variable dans la fonction "is_file()" pour en avoir le coeur net...

Bonjour.
C'est tout à fait normal, tu demande à ce que le serveur transfère un nom de fichier, ce qui ne peut pas fonctionner.
Il te faut d'abord uploader le fichier sur ton serveur, ensuite transférer le fichier avec le chemin sur le FTP puis si c'est bon tu supprimes le fichier qui est sur le serveur.
Pour pouvoir uploader le fichier sur le serveur avant de le transférer sur le FTP, il te faut utiliser l'index tmp_name et non name.
Donc récapitulatif :

  1. Tu upload le fichier soumis sur le serveur (du site)
  2. Tu transfères le fichier uploadé sur le serveur (du site) vers le FTP
  3. Si le transfert à réussi, tu supprimes le fichier du serveur (du site), pour ne pas encombrer celui-ci.