Ouvrir un fichier word en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Ouvrir un fichier word en php

Re: Ouvrir un fichier word en php

par Mazarini » 03 sept. 2012, 15:52

A mon avis, le plus simple est :
<?PHP
header("Content-type: application/msword");
readfile('fichier.doc');
?>

Re: Ouvrir un fichier word en php

par sirakawa » 03 sept. 2012, 15:09

Il est évident qu'il ne faut pas manipuler un fichier word (doc),openoffice (odt),.. avec fread qui, visiblement est conçu pour des fichiers textes sans finesses.
Une solution serait d'aller voir du côté des mime-types et de créer un lien, comme on fait d'ailleurs pour les .pdf les sons ou les vidéos.
Une exception serait les .rtf si on voulait les exploiter.
Quant à fread, son problème n'est pas de savoir s'il supprime les fins de lignes, mais de savoir ce qui se passe avec les limites en nombre de caractères : sur un fichier inconnu, il n'y a aucune raison de fixer une longueur, ce que php résout en proposant fgets...

Re: Ouvrir un fichier word en php

par Mazarini » 03 sept. 2012, 10:02

En fait, je ne sais pas pourquoi il y aurai le caractère \n dans un fichier word, mais ce n'est pas impossible. Avec l'utilisation de fread() on perd ce caractère et donc le contenu du fichier est modifier.

C'est le même problème avec tout fichier. Pour un fichier texte, il faut remettre le /n dans l'écho et encore, on ne sait pas s'il y avait \n ou \r\n.

Edit : J'ai ouvert un document word "vide". J'ai trouvé 7 lignes (renommé en .html et affichage du source - pas d'autre outils sous la main)

Re: Ouvrir un fichier word en php

par sirakawa » 03 sept. 2012, 09:47

1)
a Le risque avec fread, en spécifiant une taille à lire, est qu'il tronque une ligne, un mot ou un marqueur.
b fgets lit ligne par ligne en se fiant aux caractères de fin de ligne, mais, dans un traitement de texte, je doute que le retour visuel à la ligne soit marqué par un caractère \nl qui sert probablement de fin de paragraphe.
2) Si un fichier peut être lu et affiché correctement par echo ou print de php, il peut être affiché correctement par le cat de unix. Au cas où je n'aurais pas été clair le fichier contenant:
php
france
enregistré au format .doc fait 9216 octets pour 9 lettres + 2 fins de ligne et 1 fin de fichier. Le reste est du code ajouté par Micromou au milieu duquel on trouve le texte....

Re: Ouvrir un fichier word en php

par Mazarini » 03 sept. 2012, 08:47

Bonjour,

Il me semble que fread() supprime les passages à la ligne \n et \r\n d'ou le problème. Essayes avec une autre fonction qui lit vraiment le fichier sans interprétation comme file_get_content(), fgetc() ou readfile(). De mémoire, je te conseille readfile().

Re: Ouvrir un fichier word en php

par sirakawa » 02 sept. 2012, 08:51

Le format doc de word est un format propriétaire que word et open office savent lire.
fread lit effectivement ce fichier, y compris les marques de mise en forme quite semblent être des bugs.
Ce serait la même chose avec un fichier odt de open office.
Il suffit de mettre un lien et de prier que la machine client ait un word ou un ofice installé pour que ça fonctionne.

Ouvrir un fichier word en php

par greg6fr » 31 août 2012, 15:57

Bonjour,

Le script php ci-desous me permet d'ouvrir un document word existant contenu dans un dossier.

Mais quand il ouvre le fichier word, voit des caractère assez-bizarre, autre que ceux qui figurent

sur mon fichier d'origine, mais les 2 documents (celui téléchargé et l'original figurant dans le repertoire

du serveur) portent le même nom.

Voici le code :

<?php


$path ="protocoles/";
$fullPath = $path.$_GET['download_file'].".doc";

echo $fullPath;

if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "doc":
header("Content-type: application/msword");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
}
header("Content-length: $fsize");
header("Cache-control: private"); //use this to open files directly
while(!feof($fd)) {
$buffer = fread($fd, 1024);
echo $buffer;
}
}
fclose ($fd);
exit;
?>

Aidez-moi à corriger ce bugg