OVH Cloud OVH Cloud

Ouvrir fichier (pdf, tiff...) [LONG]

2 réponses
Avatar
Informatique CARPIMKO
Bonjour,
j'ai deja envoyé ce post, j'ai bien regardé la faq et je ne comprends
toujours pas. Je vais donc préciser mon problème.
je souhaite afficher différents types de fichiers comme des pdf, des tiff,
des txt...
Voilà mon code:

***** Index.php *****

<html>
<head>
<title>Visualisation</title>
</head>
<body>

<?php
include "Fonctions.php";
$Chrono=$_GET['Libelle'];
$NomDoc=LitDocChrono($Chrono);

header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$NomDoc);
?>
</body>
</html>

***** Fichier Fonctions.php *****
*** Sert à créer mon fichier à partir de son numéro de chrono
*** Fonctionne bien
<?
include "Connection.php";
function LitDoc ($VolumeName, $NumVolume, $Position) {

if (file_exists($VolumeName)) {
if ($fp=fopen($VolumeName,"rb")) {
//Vérification sur le début du volume (CARPVOL et NumVol)
rewind($fp);
if ((fread($fp,7)=="CARPVOL") and (fread($fp,5)==$NumVolume)) {
$DebLibre=(int)fread($fp,10);
fread($fp,$Position-23);

if ($Position<$DebLibre) {
if (fread($fp,3)=="$*<") {
fread($fp,44);
$LgDoc=fread($fp,10);
$LgNom=fread($fp,5);
$NomDoc=fread($fp,$LgNom);
$FinDoc=ftell($fp)+$LgDoc;

//Création du fichier
if ($fp2=fopen($NomDoc,"wb+")) {
/*
while (ftell($fp)<$FinDoc) {
fputs($fp2,fread($fp,1));
}
*/
while (ftell($fp)<$FinDoc) {
fputs($fp2,fread($fp,4096));
}
} else {
echo "Ouverture ou création du fichier impossible";
}
} else {
echo "Séparateur introuvable";
}
} else {
echo "Impossible de lire le document (mauvaise position)";
}
} else {
echo "Problème dans le début du volume: ".$VolumeName;
}
} else {
echo "Ouverture du fichier impossible: ".$VolumeName;
}
} else {
echo "Fichier inexistant: ".$VolumeName;
}
fclose($fp);
return $NomDoc;
}
function LitDocChrono ($NumChrono) {
$sql="select I.NumVolume as NumVolume, I.Debut as Debut, V.VolumeName as
VolumeName from [Index] I, Volume V where I.Chrono='".$NumChrono."' and
I.NumVolume=V.NumVolume";
$result=mssql_query($sql);
if (mssql_num_rows($result)==1) {
$NumVolume=mssql_result($result,'0',"NumVolume");
$Debut=mssql_result($result,'0',"Debut");
$VolumeName=mssql_result($result,'0',"VolumeName");
$NomDoc=LitDoc($VolumeName,$NumVolume,$Debut);
return $NomDoc;
} else {
echo "Ce numéro de chrono n'existe pas";
exit();
}
}
?>

Lorsque j'execute ma page index.php, j'ai une erreur:
Warning Cannot add header information - headers already sent

Si j'execute la page:
<?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=test.pdf");
?>

j'ai une erreur:
une erreur est survenue lors de l'ouverture de ce document. Erreur de
lecture de fichier.


Pour la page index.php, je pense que mon erreur vient des echo mais je ne
vois pas comment faire autrement.

Sinon est-ce qu'il faut que je gère moi-même les différents types de fichier
dans le code php (voir code
ci-dessous) ? ou alors est-ce que mon serveur apache peut les gérer (via
httpd.conf) ? Est-ce qu'il faut rajouter une ligne en indiquant
l'application comme: AddType application/pdf .pdf (je ne connais pas la
syntaxe)
Voilà ce que je veux faire exactement: j'ai des documents qui sont rangés
dans des volumes et j'ai plusieurs tables qui me permettent de gérer tout
ça. A partir d'un numero id, j'arrive à récupérer mon document (et à le
stocker. je ne sais pas encore où je vais le mettre: réseau ? en local ?
C'est une application intranet. Ce que j'aimerais, c'est que lorsque je
clique sur un bouton (ou lien), mon document s'affiche. Je voulais faire un
header("location:test.pdf") après mon traitement mais cela ne fonctionne
pas. Lorsque je fais un "simple" lien avec <a href="test.pdf"> cela
fonctionne très bien mais j'aimerais éviter d'avoir à cliquer une nouvelle
fois. J'espère que vous pourrez me renseigner, d'avance merci.

Yannick

2 réponses

Avatar
John GALLET
Bonjour,

j'ai deja envoyé ce post, j'ai bien regardé la faq et je ne comprends
toujours pas.
Soit.




header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$NomDoc);
En première lecture, ça a l'air correct.

Essayer aussi avec Content-disposition: (pas de D majuscule).

Warning Cannot add header information - headers already sent
http://faqfclphp.free.fr/#ss2.11



j'ai une erreur:
une erreur est survenue lors de l'ouverture de ce document. Erreur de
lecture de fichier.
Essayer avec d'auters navigateurs. Les ouvertures automatiques sont très

dépendantes du client.


Pour la page index.php, je pense que mon erreur vient des echo mais je ne
vois pas comment faire autrement.
En les enlevant peut-être ?


ci-dessous) ? ou alors est-ce que mon serveur apache peut les gérer (via
httpd.conf) ?
A ton avis, c'est ton serveur qui va ouvrir le fichier PDF pour l'afficher

sur l'écran du PC de l'internaute ? M'enfin ! (tm)

JG

Avatar
Jean-Marc Molina
Ce fameux moteur de recherche que tu devrais utiliser :
http://www.google.fr/search?q=PHP+%22Warning+Cannot+add+header+information+-+headers+already+sent%22&ie=UTF-8&oe=UTF-8&hl=fr&btnG=Recherche+Google&meta=lr%3Dlang_fr

Cette fameuse FAQ dont on t'a parlé : http://faqfclphp.free.fr/#ss2.11

Cherche si tu veux trouver ! Le newsgroup n'est pas un dépotoir pour ce
genre de questions.