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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 34
    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
    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
    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 éclairé 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 : 34
    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
    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
    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 éclairé 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 : 34
    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
    Par défaut
    Toujours pareil, "syntax error"..

  6. #6
    Membre éclairé 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 : 34
    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
    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
    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

+ 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