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

PHP & Base de données Discussion :

copy, \copy et PHP [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut copy, \copy et PHP
    Bonjour,
    Je suis en train d'essayer de remplir une table à partir d'un fichier afin de rendre accessible la manip' à tous, je désire passer par une page php/html.

    Avant, j'allais dans la console psql, je tapais ma petite ligne de commande :
    \COPY ma_table FROM 'mon_fichier.csv';

    J'essaye de refaire cette ligne en PHP et c'est là que ça coince.

    Tout d'abord, voici mon formulaire HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form method='post' name='rsm02' enctype="multipart/form-data">
                <?php // echo form_rsm02(); ?>
                <input type="file" name="file">
                <br/><br/>
                <input type='submit' name='Submit' value='Envoyer'>
            </form>

    Ensuite, le code PHP
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
            if (isset($_POST['Submit'])) {
                $file = $_FILES['file']['tmp_name'];
                echo $file . "<br/>";
                print_r($_FILES['file']);
     
                //insertion dans rsmind
                $conn = connec_base();
                pg_query($conn, "copy rsmind from '$file';");
            }
            ?>

    Quand j'essaye avec "copy" tout simplement, j'ai le droit à :
    ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone...
    Et quand j'essaye \copy :
    ERROR: syntax error at or near "\" LINE 1: \copy rsmind from...
    Je ne comprend pas cette histoire de stdout et stdin.

    J'ai trouvé quelqu'un avec un problème similaire mais pas l'air d'avoir de solution http://bytes.com/topic/postgresql/answers/692405-syntax-copy-command .

    Voila, en vous remerciant d'avance !
    Bonne journée.

  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
    L'erreur est pourtant claire : il faut que ton utilisateur Postregsql soit superuser.

    Au passage, n'oublie pas de protéger tes requêtes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Aucun moyen de contournement donc ..? (puisque je n'ai pas de "superuser")

  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
    essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pg_query($conn, "\\copy rsmind from '$file';");
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Toujours pareil, "syntax error"..

  6. #6
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Si l'on regarde par là, http://www.daniweb.com/web-development/php/threads/424967/csv-to-postgre-with-copy-problemquestion
    Je crois comprendre que \copy ne fonctionne pas en dehors de la console donc ?

  7. #7
    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
    Bon apparement \copy n'existe qu'en ligne de commande.

    Deux solutions :

    - lancer ta ligne de commande psql en PHP
    - passer le fichier ligne par ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pg_query($conn, "copy rsmind from stdin");
    $handle = fopen($file,'r');
     while (($buffer = fgets($handle, 4096)) !== false) {
            pg_put_line($conn, $buffer); 
      }
    pg_put_line($conn, "\\.\n");
    pg_end_copy($conn); 
    fclose($handle);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Hé bien nous sommes arrivés à la même conclusion, en même temps ^^'.
    Merci de t'être penché sur mon problème !


    Sinon, quand j'essaye ton script, j'ai une nouvelle erreur : "Warning: pg_end_copy(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xe9 0x09 0x53 CONTEXT: COPY rsmind, line 1 in... "

    Et la ligne visée est
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    pg_end_copy($conn);

    ça vient de mon fichier ? Je précise que "0xe9 0x09 0x53" ne fait pas partie de mon fichier ..

  9. #9
    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 ton fichier PHP et ton fichier source sont encodés en UTF8 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Oui, je viens de tout reconvertir au cas où quand même mais cela ne change rien.

    Mon fichier csv ressemble à ça :
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    01/06/2013;13.68101-1;2,5;S010200;Pré-étude;PREETU;PRT;PRM0090101;Direction Production et Services;Domaine Réseaux et Bureautique;Equipe Qualité de Service;DUPONT, Richard;Autres Mutuelles autres applications
    01/06/2013;13.68101-1;1,25;S010200;Pré-étude;PREETU;PRT;PRM0090101;Direction Architecture Technique;Domaine Architecture d'Infrastructure;Equipe DAI;DOE, John;Autres Mutuelles autres applications

    Donc rien de bien compliqué. Dans la base de données, la table de travail est composée uniquement de champs "character varying"

  11. #11
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Bonjour,
    Je viens de résoudre les différents problèmes et de réussir ma quête !
    Merci encore Sabotage.

    Donc, mon fichier avait bien un soucis d'encodage (NetBeans est vraiment pas terrible pour ça..).

    Voici donc le script final, pour ceux que ça intéresse, un mélange de la solution de sabotage et de : http://www.nicoletverdier.fr/2010/03...chier-csv-php/

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
                //insertion dans rsmind
                $conn = connec_base();
                pg_query($conn, "copy rsmind from stdin");
                $fp = fopen($file, 'r');
     
                //Tant que l'on n'a pas finit de lire le fichier
                while (!feof($fp)) {
                //On lit les 4096 caractères de la ligne
                    $ligne = fgets($fp, 4096);
                    pg_put_line($conn, $ligne);
                }
                pg_end_copy($conn);
                fclose($fp);
            }
            ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FTP] Copie de source PHP d'un serveur vers un autre
    Par Nyphel dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2008, 23h36
  2. Pb open_basedir suite à copy PHP
    Par Inutile dans le forum Apache
    Réponses: 1
    Dernier message: 06/07/2006, 12h03
  3. [MySQL] Copie de base de données en PHP
    Par nicoaix dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 25/04/2006, 13h32
  4. [FTP] php serveur fonction copy
    Par Silvia12 dans le forum Langage
    Réponses: 3
    Dernier message: 31/01/2006, 18h23

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