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

Langage PHP Discussion :

enregistrement d'un fichier généré sur le serveur


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 32
    Points : 23
    Points
    23
    Par défaut enregistrement d'un fichier généré sur le serveur
    Bonjour à tous,

    j'utilise la librairie odtphp afin de générer des documents .odt respectant un calque bien précis (très pratique pour le remplissage automatique d'un CV par exemple).
    Quand je lance l'export j'ai cette fenetre qui se lance:

    Nom : export.png
Affichages : 80
Taille : 4,5 Ko

    C'est parfait mais j'aimerais en parallèle que ce fichier créé soit sauvegardé dans un dossier sur le serveur en guise de sauvegarde.

    Voici le code de la fonction de la librairie permettant l'export des données dans un fichier .odt

    Code : 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
    17
    18
    19
    20
    21
    22
     
    /**
         * Export the file as attached file by HTTP
         *
         * @param string $name (optionnal)
         * @throws OdfException
         * @return void
         */
        public function exportAsAttachedFile($name = "") {
            $this->_save();
            if (headers_sent($filename, $linenum)) {
                throw new OdfException("headers already sent ($filename at $linenum)");
            }
     
            if ($name == "") {
                $name = md5(uniqid()) . ".odt";
            }
     
            header('Content-type: application/vnd.oasis.opendocument.text');
            header('Content-Disposition: attachment; filename="' . $name . '"');
            readfile($this->tmpfile);
        }
    J'ai pensé à la fonction fopen() mais je ne l'ai pas très bien comprise et je ne sais pas comment je pourrais l'adapter ici.
    Si vous pouviez m'éclairer sur ces fonctions je vous en remercie d'avance.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Le fichier existe sans doute déjà.
    Sont chemin est probablement contenu dans $this->tmpfile
    --- edit ---
    En regardant la doc , il suffit d'appeler la fonction saveToDisk() après ton export. (tuto 9 de la doc)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Hello Grunk,
    merci par contre le saveToDisk je ne sait pas l'utiliser ni le chemin dans lequel le fichier est sauvegardé :

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    /**
         * Save the odt file on the disk
         *
         * @param string $file name of the desired file
         * @throws OdfException
         * @return void
         */
        public function saveToDisk($file = null) {
            if ($file !== null && is_string($file)) {
                if (file_exists($file) && !(is_file($file) && is_writable($file))) {
                    throw new OdfException('Permission denied : can\'t create ' . $file);
                }
                $this->_save();
                copy($this->tmpfile, $file);
            } else {
                $this->_save();
            }
        }
     
    /**
         * Internal save
         *
         * @throws OdfException
         * @return void
         */
        private function _save() {
            $this->file->open($this->tmpfile);
            $this->_parse();
            if (!$this->file->addFromString('content.xml', $this->contentXml)) {
                throw new OdfException('Error during file export');
            }
            foreach ($this->images as $imageKey => $imageValue) {
                $this->file->addFile($imageKey, './calquesODT/' . $imageValue);
            }
            $this->file->close(); // seems to bug on windows CLI sometimes
        }

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Tu avais raison quand tu as dit que le fichier existait déjà.
    Je suis allé dans le répertoire tmp à la racine du serveur et j'ai retrouvé l'ensemble des fichiers avec un nom complétement bizarre et sans extension.
    En mettant .odt c'est bien mes fichiers générés.

    Vu que je ne comprends rien à cette fonction saveToDisk, y'a moyen que je puisse récupérer le fichier qui vient d'être déposé dans le dossier temp, le renommer et le ranger au bon endroit?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    As tu regardé la documentation plutôt que le code source ? Il y'a un exemple d'utilisation.

    Suffit de donner un nom de fichier à savetoDisk pour l'enregistrer ou tu veux , je vois comment on peut faire plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveToDisk('monfichier.odt');
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2017
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Effectivement ça fonctionne! J'avais pas actualisé Filezilla

    Merci Grunk !

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

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