Aller au contenu

Upload en PHP par FTP


lupucide

Sujets conseillés

Coucou, encore moi pour le thread chiant du jour ^^

Aujourd'hui, j'essaye la fonction FTP de PHP.

Il s'agit de choisir une image grâce à une petit formulaire HTML :

<form action="galerie.php" method="post" enctype="multipart/form-data">
<fieldset>
 <p><input type="file" name="img" size="30" />
 <input type="submit" name="go" value="Envoyer" /></p>
</fieldset>
</form>

Puis d'envoyer le tout par FTP :

if (isset($_POST['go'])) {
if (empty($_FILES['img']['tmp_name'])) {
 $msg_form = '<p>Pas de fichier...</p>';
}
else {
 $file = $_FILES['img']['tmp_name'];
 $size = filesize($file);
 if ($size > 400) {
 $msg_size = '<p>Fichier trop volumineux : arrêt !</p>';
 }
 // Ouverture de la session FTP
 $conn_id = ftp_connect("monftp.com");
 $login_result = ftp_login ($conn_id, "logtest", "passtest");
 // Test
 if ((!$conn_id) || (!$login_result)) {
 $msg_open = "<p>La connexion a échouée.</p>";
 die;
 }
 else {
 $msg_open = "<p>Connexion établie.</p>";
 $dest = ftp_chdir($conn_id, 'media/');
 $upload = ftp_nb_put($conn_id, $file, $dest, FTP_BINARY);
 if (!$upload) {
   $msg_upload = '<p>Upload OUT</p>';
   die;
 }
 else {
   $msg_upload = '<p>Upload OK</p>';
 }
 }
 // Fermeture de la session FTP
 $close = ftp_close($conn_id);
 if (!close) {
 $msg_close = '<p>La déconnexion a échoué.</p>';
 die;
 }
 else {
 $msg_close = '<p>Déconnexion effectuée.</p>';
 }
}
}

Attention petit lapin, une ou plusieures erreurs se cachent dans le code ci-dessus, sauras-tu les retrouver ? :P

En fait, je bute sur une page m'indiquant :

Warning: ftp_nb_put(1) [function.ftp-nb-put]: failed to open stream: No such file or directory in f:\wamp\www\03\admin\galerie.php on line 29

C'est bon coco, je sais, tu n'aime pas le chemin que je te refile pour la source.

La ligne 29 étant :

$upload = ftp_nb_put($conn_id, $file, $dest, FTP_BINARY);

Mais alors, comment faire ? :huh:

Lien vers le commentaire
Partager sur d’autres sites

Je viens de tester :

$dest = 'media';
$upload = ftp_nb_put($conn_id, $file, $dest, FTP_BINARY);

Et :

$dest = 'media';
$upload = ftp_nb_put($conn_id, $file, $dest.'/', FTP_BINARY);

Ca ne fonctionne pas non plus.

Merci d'avoir essayer.

Lien vers le commentaire
Partager sur d’autres sites

Bon, je met ce script en stand by car il semblerait qu'il ne soit pas possible d'envoyer par FTP en fichier sélectionné avec avec un <input type="file" />.

J'ai bien tenter de modifier un peu l'ensemble :

if (isset($_POST['go'])) {
if (empty($_FILES['img']['name'])) {
 $msg_form = '<p>Pas de fichier...</p>';
}
else {
 $file = pathinfo($_FILES['img']['name']);
 // Ouverture de la session FTP
 $conn_id = ftp_connect("mondtp.com");
 $login_result = ftp_login ($conn_id, "logtest", "passtest");
 // Test
 if ((!$conn_id) || (!$login_result)) {
 $msg_open = "<p>La connexion a échouée.</p>";
 die;
 }
 else {
 $msg_open = "<p>Connexion établie.</p>";
 $dest = ftp_chdir($conn_id, 'media');
 $upload = ftp_nb_put($conn_id, $dest.'/', $file['dirname'].'/'.$file['basename'], FTP_BINARY);
 if (!$upload) {
   $msg_upload = '<p>Upload OUT</p>';
   die;
 }
 else {
   $msg_upload = '<p>Upload OK</p>';
 }
 }
 
 // Fermeture de la session FTP
 $close = ftp_close($conn_id);
 if (!close) {
 $msg_close = '<p>La déconnexion a échoué.</p>';
 die;
 }
 else {
 $msg_close = '<p>Déconnexion effectuée.</p>';
 }
}
}

Le script plante toujours sur ftp_nb_put en me déclarant le path comme étant ./Predator - Concrete Jungle.JPG.

Je ne vois pas d'autre moyen d'indiquer correctement le chemin du fichier...

Lien vers le commentaire
Partager sur d’autres sites

Juste une question.

Tu veux envoyer le tout où ?

Sur le meme serveur que celui qui a le formulaire, ou un autre ?

Si tu veux uploader un fichier de ton ordinateur à ton serveur, ce n'est pas cette fonction qu'il faut utiliser.

Cette fonction est utile si tu veux envoyer un fichier à partir de ton serveur, vers un serveur ftp distant.

Lien vers le commentaire
Partager sur d’autres sites

A la base il s'agissait juste d'un script d'upload d'images vers un serveur distant mais je suis rentré dans le jeu et me demande si un script complet type "ligne de commande" pour faire des actions FTP serait faisable.

Si je bute sur une simple fonction de ce type ce serait un échec :(

En attendant je me suis rabattu sur un simple upload via move_uploaded-file(), comme tu le préçise. En tout cas merci du coup de main.

Ce thread n'est pas encore mort :P

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...