IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Exporter une table sql de mon hébergeur sur mon ordi avec un script php


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut Exporter une table sql de mon hébergeur sur mon ordi avec un script php
    Bonjour,

    De temps en temps, je vais sur le phpMyAdmin de mon hébergeur et je clique sur "export" pour sauvegarder une table sur mon ordi. Jusque là, tout va bien, c'est facile.

    Seulement voilà, j'aimerai pouvoir faire la même chose tous les jours sans avoir besoin d'entrer à chaque fois chez mon hébergeur et faire plusieurs click pour arriver jusqu'au phpMyAdmin.
    J'aimerai donc faire un petit script sur la page "administrator.php" de mon site pour envoyer "matable.sql" directement sur mon ordi en cliquant simplement sur un bouton qui activera le script.
    Je suis allé voir sur Internet et je trouve des trucs du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file = 'backups/mytable.sql';
    $result = mysql_query("SELECT * INTO OUTFILE '$file' FROM `##table##`");
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $file = 'backups/mytable.sql';
    system("mysqldump --opt -h ##databaseserver## -u ##username## -p ##password## ##database | gzip > ".$file;);
    Mais voilà, cela semble incomplet pour ce que je souhaite.

    Pourriez-vous m'aider à compléter ce script afin de réaliser l'opération décrite ci-dessus?
    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Cela veut dire quoi "semble incomplet" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Si je me contente d'insérer ça dans mon code php.
    Il ne se passe rien ou tout du moins, je ne vois rien.
    Et je n'ai aucune idée de l'endroit ou serait éventuellement stocké ce backup.

    Voilà pourquoi, je dis que cela me semble incomplet.
    J'ai l'impression d'avoir le G jusqu'à R (par exemple) sans avoir le A jusqu'à G ni le R jusqu'à Z.
    Je loupe un élément qui est peut-être évident pour vous mais que je n'imagine même pas.
    Et je suis donc un peu perdu.
    Pourriez-vous m'aider?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai l'impression d'avoir le G jusqu'à R (par exemple) sans avoir le A jusqu'à G ni le R jusqu'à Z.
    On fait du développement ou de la voyance ?

    Le fichier est enregistré la ou tu l'as demandé : backups/mytable.sql ... sur ton serveur évidemment.
    Tu peux ajouter un readfile() ensuite pour lire le fichier.

    Attention quand même a la sécurité dans toute ton histoire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Je préférerai rester dans le domaine du développement...

    Comme tu me l'as proposé, Sabotage, j'ai ajouté un readfile() dans mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_POST['TablesBackup'])) {$file = 'backups/mytable.sql';
      $MyBase = new mysqli(BaseHost, BaseUser, BasePass, BaseName);
      $Result = $MyBase->query("SELECT * INTO OUTFILE '$file' FROM `members`");
      header('Location :'.$file); readfile($file);}
    J'obtiens le message d'erreur suivant:
    Warning: readfile(backups/mytable.sql): failed to open stream: No such file or directory in C:\wamp\www\...

    Au secours...

    Citation Envoyé par sabotage Voir le message
    Attention quand même a la sécurité dans toute ton histoire.
    @ Sabotage, que veux tu dire exactement à propos de la sécurité...
    Pourrais-tu développer un peu plus? Car j'ai du mal à deviner...
    Il semble que je ne sois pas plus doué en voyance qu'en développement...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour le readfile() met le fichier complet.
    Enlève le header()

    Pour la sécurité, assure toi que tu es le seul a pouvoir accéder au fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    @Sabotage,
    Ok, j'ai enlevé le header mais pour le readfile, que veux tu dire par "fichier complet"?
    Tes réponses sont trop courtes et me poussent à faire de la voyance pour deviner ce que tu veux dire.
    J'aimerai t'emmener en bateau et te dire plein de termes marins "regarde l'étambot", "barre sur babord amure", "choque l'écoute de grand voile", "borde le génois", etc... et tu me ragarderas avec des grands yeux... car tu n'auras rien compris.
    Et bien pour moi, c'est pareil, je te regarde avec des grands yeux car les choses qui te paraissent évidentes pour toi ne le sont pas pour moi, tout simplement. Je suis un "apprenti web" comme dit ci-contre.

    Pour la sécurité, le bouton qui requiert cette action est dans ma page "administrator.php" protégée par mot de passe et l'ouverture d'une session. De plus, j'ai un certificat SSL qui me donnera en live une connection https. Est-ce suffisant?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je voulais dire le "chemin complet".
    En supposant que "backups" soit à la racine de ton site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readfile($_SERVER['DOCUMENT_ROOT'] . '/backups/mytable.sql');
    Pour la sécurité toujours, il faut que le fichier d'export ne puisse pas être appellé directement.
    Donc soit tu le mets dans un dossier protégé par .htaccess, soit tu le supprimes à la fin de ton traitement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Merci Sabotage, pour ta réponse et ton bout de code qui m'éclaire bien mieux.

    Maintenant, je réalise que cela ne marchera, peut-être, pas sur mon WAMP car je n'ai pas pris la peine de configurer un "virtual host" car je ne sais simplement pas le faire.
    Et pour me servir de WAMP, j'entre simplement manuellement le chemin URL dans mon navigateur et ça marche, cela me permet de visualiser mon site mais peut-être pas des actions agissant sur la racine de mon serveur local qu'est WAMP. Serais-je dans le vrai?

    Quant à un dossier protégé par .htaccess, j'ai déjà entendu parler de ce truc pour forcer par exemple l'arrivée de mes visiteurs sur mon site en https. Malheureusement, c'est un domaine de plus que je ne maitrise absolument pas. Donc, je préfère éviter de me servir de ce .htaccess.

    Quel serait ton petit bout de code pour supprimer le fichier d'export à la fin du traitement?
    Cela me donnera le "Z" des étapes.

    Maintenant, il me manque encore pas mal d'étapes car je suppose que le readfile me permet juste de voir la sauvegarde mais ne transfère nullement le fichier "matable.sql" sur mon ordi... N'est-ce pas?

    Comment compléterais tu mon code pour exporter "matable.sql" sur mon ordi?

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    - Pour la racine du site, il n'y a pas besoin de virtual host.
    - Pour interdire un dossier il suffit d'ajouter un fichier ".htaccess" contenant la ligne "Deny from All" dans le repertoire
    - Pour supprimer un fichier c'est la fonction PHP unlink()
    - Si tu vois un document sur ton navigateur, c'est que tu l'as telechargé
    Pour forcer le telechargement du fichier et ne pas simplement qu'il s'affiche dans la navigateur, ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header("Content-Disposition: attachment; filename=mytable.sql");    
    header("Content-Type: application/force-download");
    readfile($_SERVER['DOCUMENT_ROOT'] . '/backups/mytable.sql');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Merci Sabotage,

    Je viens d'essayer. J'ai une pop up window qui me demande si j'accepte de télécharger.
    Je réponds oui évidement puis j'ouvre "matable.sql" pour voir le contenu et...

    j'y découvre le code HTML de ma page "administrator.php"...

    OUPS... Moi y en a plus rien comprendre... Mais, y a tout de même du progrès et c'est grâce à toi.

    Comment expliquerais-tu le problème ci-dessus et que me proposerais tu comme bout de code pour remédier au problème?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le code qui produit et lit le fichier sql doit être séparé de ton contenu HTML.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    @ Sabotage,

    Afin de séparer le code qui produit et lit le fichier, je l'ai d'abord mis en tout début de ma page "administrator.php".
    Même beans où je retrouve dans "mytable.sql" le code HTML de ma page "administrator.php".
    Pour être sur de le séparer encore plus j'ai mis ce code sur une page apart "backup.php" où il n'y que ce code et pas une goutte de HTML.
    Le résultat est une page toute blanche dans "mytable.sql" alors que ma table de départ n'est nullement vide, bien évidement.
    Avec humour, j'ai envie de te dire: "C'est quoi... ce sabotage ??? tonnerre de brest !!! ".
    Je te joins le code de ma page "backup.php" 100% php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php include('BaseInfoO.php');
     
    if (isset($_POST['TablesBackup'])) {$file = 'IFDI.bizM/mytable.sql';
      $MyBase = new mysqli(BaseHost, BaseUser, BasePass, BaseName);
      $Result = $MyBase->query("SELECT * INTO OUTFILE '$file' FROM ifdibizvisitors");
      header("Content-Disposition: attachment; filename=mytable.sql");    
      header("Content-Type: application/force-download");
      readfile($_SERVER['DOCUMENT_ROOT'] . 'IFDI.bizM/mytable.sql');} ?>
    A part ça, puisque le readfile ne semble pas s'opérer, j'ai enlevé la ligne et le téléchargement se fait bien aussi mais "mytable.sql" est toujours et encore vide.

    Que faire ???

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu enlèves le readfile() c'est un peu normal que tu telecharges un fichier vide.

    Par contre je n'ai pas compris ce que tu obtenais avec le readfile().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Que j'enlève ou que je garde le readfile, j'obtiens le même résultat: Une page vide.
    Mon fichier "mytable.sql" est simplement vide.

    Avec le readfile, je n'obtiens rien et c'est pour cela que je me suis amusé à l'enlever une fois et cela m'a montré qu'il n'y a aucune différence dans le résultat final. Ce qui m'amène à me demander son utilité...

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que le fichier mytable.sql sur le serveur contient quelque chose ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Bah, non, il ne contient rien.

    Pour éviter un message d'erreur, je l'ai créé vierge en espérant qu'il se remplisse lorsque le "INTO OUTFILE" de SQL entre en action mais il ne se remplit pas.

    Et si je ne crée pas "mytable.sql" avant d'activer le "INTO OUTFILE" de SQL, j'obtiens le message d'erreur de SQL:
    Warning: readfile(C:/wamp/www/IFDI.bizM/mytable.sql): failed to open stream: No such file or directory in C:\wamp\www\IFDI.bizM\Backup.php on line <i>8</i>

    Alors docteur, Est-ce grave?

  18. #18
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Contrôle si ta requête produit une erreur :
    (en retirait header() et readfile())
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  19. #19
    Membre régulier
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Salut Sabotage,

    Quand tu parles de $mysqli, je suppose que tu veux parler de ce que j'appelle $MyBase dans mon code.
    j'ai donc ajouté "$Mybase->error;" et enlevé le reste comme tu dis.
    Voici mon code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php include('BaseInfoO.php');
     
    if (isset($_POST['TablesBackup'])) {$file = 'IFDI.bizM/mytable.sql';
      $MyBase = new mysqli(BaseHost, BaseUser, BasePass, BaseName);
      $Result = $MyBase->query("SELECT * INTO OUTFILE '$file' FROM ifdibizvisitors");
      echo $MyBase->error;} ?>
    Et voici le message d'erreur que j'obtiens:
    "Can't create/write to file 'c:\wamp\bin\mysql\mysql5.6.17\data\IFDI.bizM\mytable.sql' (Errcode: 2 - No such file or directory)"

  20. #20
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme tu le vois, il n'écrit pas à l'endroit prévu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file = $_SERVER['DOCUMENT_ROOT'] . '/IFDI.bizM/mytable.sql';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [Débutant] Remplir une ComboBox à partir d'une table SQL (avis sur mon code)
    Par thomas1989 dans le forum C#
    Réponses: 3
    Dernier message: 07/10/2013, 13h38
  2. Réponses: 8
    Dernier message: 25/08/2011, 14h25
  3. Exporter une table SQL dans DB2 ?
    Par Chikh001 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/07/2007, 14h44
  4. lier une table Sql Server sur Access
    Par JerBi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 17h27
  5. Pooling sur une table SQL
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/11/2004, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo