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 :

BEsoin de conseils : Php et fichiers word/php/openoffice


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut BEsoin de conseils : Php et fichiers word/php/openoffice
    Bonjour à tous,

    je développe actuellement un intranet en Php avec bdd mysql sous serveur apache. J'ai un dossier contenant des fichiers word, pdf et openoffice dans lequel je dois pouvoir rechercher un mot-clé via un formulaire sur mon intranet et ressortir en résultat les liens des fichiers contenant ce mot clé....

    Avez-vous une idée de la méthode à employer? Connaissez-vous peut -être une API qui pourrait m'aider ou des fonctions PHP que je pourrais utiliser?

    Merci d'avance...

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Il te faudra utiliser des librairies dédiées.
    Moi, quand j'ai un .doc, je prends PHPWord, un .xls => PHPExcel, un .pdf => tcpdf pour les générer, pour les lire, je ne sais même pas si c'est possible, un .odt, heu je n'ai jamais eu à gérer des .odt, mais => phpodt a l'air d'exister.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Candidat au Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut
    Bonjour Dendrite!

    Merci de ta réponse! J'avais lu que je pouvais ouvrir un fichier avec la fonction fopen, ca ne suffit pas dans mon cas? Sachant que je ne veux pas manipuler les fichiers word/Pdf/ODT mais juste les lire et vérifie que ma chaine de caractères s'y trouve ou non?

    Bonne journée. Cdt.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En gros, fopen fonctionne exactement comme Notepad : ça marche très bien si c'est un fichier texte (txt, csv, xml...) Par contre, si le fichier a un contenu binaire, tu vas obtenir de la bouillie de caractères.

    Bon, si mes souvenirs sont exacts, les fichiers Word et Excel récents (docx et xlsx), et les fichiers ODT sont en fait des archives zip contenant des fichiers XML, donc en théorie, on peut les ouvrir avec ZipArchive (ou équivalent) et ensuite parcourir le contenu avec fopen. Mais c'est un chouia tordu comme technique.

    Par contre, pour les PDF, il va obligatoirement te falloir un parser.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Candidat au Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut
    Merci beaucoup

  6. #6
    Membre expérimenté
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2014
    Messages : 461
    Par défaut
    Bonjour à tous.
    Il faut savoir que les fichiers Office (et Libreoffice), depuis 2007 (les docx, etc) sont en fait des zip . (il suffit de les renommer avec l'extension .zip pour comprendre leur architecture) composés d'une arborescence contenant une foultitude de fichiers xml. Ces fichiers étant compressés, on ne pourra pas y trouver une chaine spécifique telle qu'elle apparait dans office.

  7. #7
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    domi65 a raison. Les fichiers docx ou xlsx ne sont que des fichiers zippés.

    Néanmoins même en les dézippant on n'arrivera pas à faire une recherche. En effet, tout ce qui est texte n'est pas forcément stocké tel quel dans un fichier. Par exemple pour les fichiers Excel les chaînes de caractères sont stockées dans un fichier à part et ce sont les références à ce fichier qui sont enregistrées dans celui qui contient un classeur. Quand j'ai écrit mon propre phpExcel c'est même ce qui m'a le plus embêté (avec la gestion des styles).
    Pour les fichiers Word ce n'est pas exactement le même système mais d'après le peu que j'ai pu voir il y a une sorte de factorisation qui fait qu'un mot n'est pas forcément stocké entièrement. Bref à peu de choses près il faut simuler l'exécution du document pour faire une recherche.

    Pour lire du Excel vous pouvez utiliser le script que j'ai posté sur le forum => https://php.developpez.com/telecharg...ers-Excel-xlsx

    Pour Word j'avais commencé le même genre de boulot mais je n'ai pas trop de temps à consacrer; il y a énormément de travail de recherche à faire pour comprendre le fonctionnement et pas beaucoup de documentation ou d'exemples qui permettraient d'économiser du temps.

  8. #8
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Un petit bout de code permettant de rechercher du texte dans un docx.

    Ecrit en moins d'une heure donc peu testé et pas sûr que tous les cas soient gérés car il me semble que Word factorise du texte de temps en temps.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
    class findInDOCX {
     private $docxFileName; 
     private $patternStr   = "/<w:t[^>]*>([^<]*)<\/w:t>/msi";
     private $text;
     
     public function load($docxFileName) {
      if (!preg_match("/\.docx$/i",$docxFileName)) die("findInDOCX expects the file to be .docx"); 
      if (!file_exists($docxFileName)) die("findInDOCX expects the file $docxFileName to exist");
     
     
      $this->docxFileName = $docxFileName;
      $this->text   = "";
      $this->exec();  
     }
     
     
     private function exec() {
      $document          = 'word/document.xml';
      $this->resultArray = array();
     
      $zip               = new ZipArchive;
     
      if ($zip->open($this->docxFileName) === true) {
       $workDocument = $zip->getFromName($document);
       preg_match_all($this->patternStr,$workDocument,$arrText);
     
       foreach($arrText[1] as $key => $value) {
        $arrText[1][$key] = html_entity_decode($value,ENT_XML1);
       }
     
       $this->text = implode('',$arrText[1]);
       //var_dump($this->text);
       $zip->close();
      } else {
       die("findInDOCX => exec is unable to unzip ".$this->docxFileName);
      }
     } 
     
     public function find($searchString) {
      return preg_match("/".$searchString."/msi",$this->text) == 1 ? true : false;
     }
    }
    $a = new findInDOCX();
    $a->load("xlsxExcelReader.class.php.docx");
    echo $a->find('nommée') ? "trouvé" : "pas trouvé";
    echo "<br/>";
    echo $a->find('hike ') ? "trouvé" : "pas trouvé";

    EDIT : en ajoutant une méthode on peut avoir le texte sans formatage bien sûr.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/03/2014, 15h23
  2. php et fichiers word doc
    Par zerros dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2012, 16h28
  3. Générer un fichier word ou excel en php
    Par Taz_8626 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 10/05/2011, 09h57
  4. [PHP] Interpréter le code PHP des fichiers html
    Par adanall dans le forum Apache
    Réponses: 2
    Dernier message: 04/05/2008, 15h33
  5. Réponses: 5
    Dernier message: 10/05/2007, 11h54

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