Ouvrir fichier (pdf, tiff...) [LONG]
Le
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
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

Poser une question


Essayer aussi avec Content-disposition: (pas de D majuscule).
dépendantes du client.
sur l'écran du PC de l'internaute ? M'enfin ! (tm)
JG
http://www.google.fr/search?q=PHP+%...%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.