[CakePHP 3] Download d'un fichier depuis un FTP

Par ciramor, il y a 10 ans


Bonjour à tous,

Je rencontre un problème lorsque j'essaie de télécharger un fichier depuis un FTP.

$ftp = Configure::read("Sales.ftpContracts"); $conn_id = ftp_connect($ftp['server']); $login_result = ftp_login($conn_id, $ftp['username'], $ftp['password']); ftp_pasv($conn_id, true); if ((!$conn_id) || (!$login_result)){ ftp_close($conn_id); return false; } $local_file = 'LocalRapport.doc'; $server_file = "Rapport.doc"; if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Le fichier $local_file a été écrit avec succès\n"; exit(); } else { echo "Il y a un probleme"; exit(); } ftp_close($conn_id); } else { echo "Le fichier n'est pas accessible en écriture."; exit; }

Cependant, il ne passe pas la condition "ftpget".
J'ai vérifié la variable de connexion et elle me renvoie bien "true".

Dans les logs, voilà ce que je reçois :

2015-06-18 11:13:09 Warning: Warning (2): ftp_get(): Can't open Rapport.doc: No such file or directory in [/home/fricopycrp/sales/src/Controller/Admin/SalesCustomersController.php, line 655] Trace: Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 138 ftp_get - [internal], line ?? App\Controller\Admin\SalesCustomersController::customer_report() - APP/Controller/Admin/SalesCustomersController.php, line 655 App\Controller\Admin\SalesCustomersController::test() - APP/Controller/Admin/SalesCustomersController.php, line 591 Cake\Controller\Controller::invokeAction() - CORE/src/Controller/Controller.php, line 404 Cake\Routing\Dispatcher::_invoke() - CORE/src/Routing/Dispatcher.php, line 114 Cake\Routing\Dispatcher::dispatch() - CORE/src/Routing/Dispatcher.php, line 87 [main] - ROOT/webroot/index.php, line 37

Il semblerait qu'il n'arrive pas ouvrir le fichier .doc ou il ne le trouve pas. J'ai essayé de me repositioner grâce à ftp_chdir($conn_id, $dir); en y listant les fichiers/dossiers, je n'ai rien d'affiché.

Quelqu'un aurait-il une idée à propos de ceci ?

Je vous remercie pour votre aide.

DR

6 réponses

Huggy, il y a 10 ans

ftp n'arrive pas à créer le fichier en local, soit parcequ'il n'a pas les droits d'écriture soit parceque le chemin local n'existe pas (ftp ne crée pas automatiquement le chemin cible).
Tu es sur quel système ?

ciramor, il y a 10 ans

Salut Huggy.

J'utilise Windows 7. J'ai une question qui peut paraître stupide mais... Si on spécifie aucun path, c'est à dire, on écrit $local_file = 'LocalRapport.doc';, où est-ce qu'il va donc l'enregistrer en local, du moins, essayer de l'enregistrer ?

Huggy, il y a 10 ans

Il va l'écrire dans le dossier de ton script php

ciramor, il y a 10 ans

Okay, mais pourquoi ne trouve-t'il pas le fichier Rapport.doc sur le FTP ?
:(

Huggy, il y a 10 ans

Ok Rapport.doc' c'est côté serveur,
Lorsque tu te connectes, tu arrives dans un directory
Est-ce le bon ?
tu peux le verifier avec ftp_pwd
Si c'est pas le bon, déplace toi avec ftp_chdir
Si ce n'est pas un pb de directory, c'est un pb de droits en lecture ou encore plus ballot un pb de minuscule/Majuscule

ciramor, il y a 10 ans

Oula tout est réglé. Désolé Huggy de t'avoir fait perdre du temps... les variables lues dans Configure::read étaient... obsolètes
Merci tout de même!