Export CSV vers FTP via PHP & SQL

Résolu/Fermé
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018 - Modifié le 25 janv. 2018 à 13:37
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018 - 26 janv. 2018 à 18:00
Bonjour,

J'ai essayé de faire un PHP avec du SQL pour exporter le résultat d'une requête dans un fichier CSV sur mon FTP.

Pouvez vous m'aider svp ? (Le téléchargement vers le FTP ne fonctionne pas)

Voici mon PHP.

//Données pour la connexion à la base de données
$nom_du_serveur ="*************";
$nom_de_la_base ="*************";
$nom_utilisateur ="*************";
$passe ="*************";
 
//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") OR die( "ERREUR de connexion : " . mysql_error () );

// Données de connection au serveur ftp
$ftp_server="*************";
$ftp_user_name="*************";
$ftp_user_pass="*************";
$serveur_file='/Pomme.csv'; // Fichier à télécharger sur FTP

// Création de la connexion
$conn_id = ftp_connect($ftp_server);

// Authentification avec nom de compte et mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// Vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
echo "<p>La connexion FTP a échoué!";
echo "<p>Tentative de connexion à $ftp_server avec $ftp_user_name";
die;
} else {
echo "<p>Connecté à $ftp_server, avec $ftp_user_name";
}

//Requête 
$sql = mysql_query ("SELECT * FROM matable WHERE date >  DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID");

// On enregistre le fichier
file_put_contents("Pomme.csv", $contenu);

/* On télécharge le fichier $serveur_file*/
$download = ftp_get($conn_id, $monmicro_file, $serveur_file, FTP_ASCII);

// Vérification de téléchargement
if (!$download) {
echo "<p>Le téléchargement Ftp a échoué!";
} else {
echo "<p>Téléchargement de $serveur_file du serveur $ftp_server vers $monmicro_file réussi!";
}
// Fermeture de la connexion FTP.
ftp_quit($conn_id);

// On ferme la connexion à mysql
mysql_close();
?>
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
25 janv. 2018 à 15:06
Salut,

La variable $monmicro_file n'est pas définie dans le code de ton message.

Pense à activer l'affichage des erreurs PHP et/ou consulter le journal d'erreur de ton serveur web afin de trouver l'éventuel message d'erreur FTP et cibler plus précisément la cause du problème.

As tu vérifier que php ai bien les droits en écritures sur le dossier où tu souhaites récupérer le fichier csv (le dossier défini pour le chemin du fichier $monmicro_file) ?

Bonne journée,
1
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
25 janv. 2018 à 19:38
J'ai ajouté la variable $monmicro_file et j'ai les deux messages ci-dessous :

Warning: ftp_get(/pomme.csv): failed to open stream: Permission denied in /htdocs/matable_import.php on line 234

Warning: ftp_get(): Error opening /pomme.csv in /htdocs/matable_import.php on line 234


//Données pour la connexion à la base de données
$nom_du_serveur ="************";
$nom_de_la_base ="************";
$nom_utilisateur ="************";
$passe ="************";

//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") OR die( "ERREUR de connexion : " . mysql_error () );

// Données de connection au serveur ftp (volontairement modifié)
$ftp_server="************";
$ftp_user_name="************";
$ftp_user_pass="************";
$serveur_file='/pomme.csv';
$monmicro_file='/pomme.csv';
echo "je suis l'echo ".$monmicro_file;

// Création de la connexion
$conn_id = ftp_connect($ftp_server);

// Authentification avec nom de compte et mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// Vérification de la connexion
if ((!$conn_id) || (!$login_result)) {
echo "<p>La connexion FTP a échoué!";
echo "<p>Tentative de connexion à $ftp_server avec $ftp_user_name";
die;
} else {
echo "<p>Connecté à $ftp_server, avec $ftp_user_name";
}

//Requête
$sql = mysql_query ("SELECT * FROM matable WHERE date > DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID");

// On enregistre le fichier
file_put_contents("Pomme.csv", $contenu);

/* Tente de télécharger le fichier $serveur_file*/
$download = ftp_get($conn_id, $monmicro_file, $serveur_file, FTP_ASCII);

// Vérification de téléchargement
if (!$download) {
echo "<p>Le téléchargement Ftp a échoué!";
} else {
echo "<p>Téléchargement de $serveur_file du serveur $ftp_server vers $monmicro_file réussi!";
}
// Fermeture de la connexion FTP.
ftp_quit($conn_id);

// on ferme la connexion à mysql
mysql_close();
?>
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
25 janv. 2018 à 20:54
bonsoir, as-tu lu jusqu'au bout le message de Pitet?
As tu vérifier que php ai bien les droits en écritures sur le dossier où tu souhaites récupérer le fichier csv (le dossier défini pour le chemin du fichier $monmicro_file) ?
pour éviter toute confusion: quelle est la ligne 234?
dans quel dossier souhaites-tu récupérer le fichier?
0
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
Modifié le 25 janv. 2018 à 21:32
Bonsoir,

La ligne 234 est $download = ftp_get($conn_id, $monmicro_file, $serveur_file, FTP_ASCII);

Les messages sont :
Warning: ftp_get(/pomme.csv): failed to open stream: Permission denied in /htdocs/pomme.php on line 234

Warning: ftp_get(): Error opening /pomme.csv in /htdocs/pomme.php on line 234

Pour le droit en écriture du php je ne sais pas comment faire :(
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
26 janv. 2018 à 09:11
dans quel dossier souhaites-tu récupérer le fichier?
0
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
26 janv. 2018 à 09:39
Je veux que le resultat de ma requête "$sql = mysql_query ("SELECT * FROM matable WHERE date > DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID");" puisse aller dans un fichier CSV sur la racine de mon FTP. (Pas de dossier).
0
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
26 janv. 2018 à 15:12
J'ai essayé un nouveau code PHP.

J'ai un problème à la ligne 225 :
$req=$bdd->query('SELECT * FROM matable WHERE date > DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID') or die (print_r($bdd->errorInfo()));

Pouvez vous m'aider svp ?



<?

//Données pour la connexion à la base de données
$nom_du_serveur ="*************";
$nom_de_la_base ="*************";
$nom_utilisateur ="*************";
$passe ="*************";

//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") OR die( "ERREUR de connexion : " . mysql_error () );

// Données de connection au serveur ftp
$ftp_server="*************";
$ftp_user_name="*************";
$ftp_user_pass="*************";

// Création de la connexion
$conn_id = ftp_connect($ftp_server);

// Authentification avec nom de compte et mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// L'action "c" permet d'ouvrir ou de créer, s'il y a lieu, le fichier et place le curseur en début de fichier
$monfichier = fopen('pomme.csv', 'c+');

// Tronquer le fichier à la taille zéro.
// Est équivalant à écraser le fichier
ftruncate($monfichier,0);

if($monfichier!=false)
{
// Récupérer les données de la table
$req=$bdd->query('SELECT * FROM matable WHERE date > DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID') or die (print_r($bdd->errorInfo()));

// Boucle pour lire toutes les entrées retournées par la requête SQL et les écrire dans le fichier CSV
while($donnees=$req->fetch())
{
// Écrire la ligne dans le fichier
fputcsv($monfichier,$donnees);
}

//fermeture du fichier
fclose($monfichier);
}else{
print "Impossible d'ouvrir ou de créer le fichier.";
}

// Fermeture de la connexion FTP.
ftp_quit($conn_id);

// on ferme la connexion à mysql
mysql_close();
?>
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
26 janv. 2018 à 15:31
difficile de t'aider si tu ne nous en dit pas plus...
0
mikesunshine59 Messages postés 73 Date d'inscription lundi 22 janvier 2018 Statut Membre Dernière intervention 24 février 2018
26 janv. 2018 à 18:00
Merci à tous pour vos indications.
J'ai modifié mon PHP et cela fonctionne.
Je le donne pour aider quelqu'un d'autre au cas ou :)

//Connection Mysql
mysql_connect("*************","*************","*************")or die("Problème avec la base de données");
mysql_select_db("*************")or die ("pas de connection");

$reponse = mysql_query("SELECT * FROM matable WHERE date > DATE_SUB(CURRENT_TIME(), INTERVAL 70 MINUTE) ORDER BY ID"); // Requête SQL

$fp = fopen('Pomme.csv','w');

// On fait une boucle pour lister tout ce que contient la table :
if ($reponse)
{
while ($donnees = mysql_fetch_row($reponse))

{
fputcsv($fp,$donnees);
}

//mysql_close(); // Déconnexion de MySQL
}
else
{
echo 'Pas de champs!!!';
}
?>
0