Téléchargement de fichier ( PHP) ERREUR double en-tête

Fermé
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015 - Modifié par ghizou2194 le 26/03/2015 à 23:25
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015 - 27 mars 2015 à 21:53
Bonsoir , j'ai un projet à faire et je doit télécharger des images
(upload & download) c'est un code simple sans les tests de vérifications
Le problème c'est que j'arrive pas à télécharger les image ça me fait une erreur genre :
En-têtes doubles envoyés par le serveur
Ce problème est généralement dû à un site Web ou un proxy mal configuré. Seul l'administrateur du site Web ou du proxy peut remédier à ce problème.
Code d'erreur : ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH.
voici le code :


page : image_telecharger.php

<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=facile', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}



$sql = $bdd->prepare('SELECT image FROM images WHERE id_image = ?');
$sql->execute (array($_GET['id_image']));


$data = $sql->fetch();

header('Content-description : File transfer');
header('Content-type : application/octet-stream');
header('Content-Disposition : attachment; filename="image.jpg" ');
header('Content-length : '.filesize ('upa/'.$data['image']) );
ob_clean();
readfile('upa/'.$data['image']);

?>

Merci pour votre aide s.v.p c'est très important
A voir également:

5 réponses

Utilisateur anonyme
27 mars 2015 à 00:09
Bonsoir

Ton code, en mettant un fichier image "en dur" au lieu de le lire dans une base de données, marche chez moi.
D'après ton message d'erreur, on dirait que tu as plusieurs 'Content-length' : j'ai volontairement dupliqué la ligne, pas de problème. je l'ai complètement supprimée, pas de problème non plus.
Tu n'as que ce code dans ton image_telecharger.php ou il y a autre chose ?
0
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015
27 mars 2015 à 12:45
Bonjour
Merci pour votre réponse
en fait j'ai 2 code l'un pour publier l'image et l'autre pour la télécharger
en gros voici les 2 code :

image_publier.php


<?php
session_start();
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($_SESSION['pseudo'])) {
// si ce n'est pas le cas, on le redirige vers l'accueil
header ('Location: p_connexion.php');
exit();
}
// on teste si le formulaire a bien été soumis

try
{
$bdd = new PDO('mysql:host=localhost;dbname=facile', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

if (isset($_POST['upload']) && $_POST['upload'] == 'Upload') {
if(! is_dir('upa') ) { mkdir('upa'); } //si le dossier n'existe pas on le créé avc mkdir

$date = date("Y-m-d H:i:s");
@$file = $_FILES['image']['name'];
@$lien='http://localhost/facile/publier/upa/'.$_FILES["image"]["name"];
@$tmp = $_FILES['image']['tmp_name'];
if(!empty($file)) {

move_uploaded_file($tmp,'upa/'.$file);

$sql = $bdd->prepare('INSERT INTO images (id_auteur,date_image,image) VALUES (?,?,?)');
$sql->execute(array($_SESSION['user_id'],$date,$lien));
$sql->CloseCursor();


header('Location: image_accueil.php');
exit();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Download</title>
<meta charset="utf-8"/>
</head>
<body>
<section>
<form method="post" action="image_publier.php" enctype="multipart/form-data">
<p><input type="file" name="image" />
<input type="submit" name="upload" value="Upload" /></p>
</form>
</section>
<?PHP

// on prépare une requete SQL cherchant toute les images, les dates ainsi que l'auteur pour le membre connecté
$req = $bdd->prepare ('SELECT image,date_image, user.pseudo as moi ,id_image FROM images INNER JOIN user ON images.id_auteur = user.user_id WHERE id_auteur = ? ORDER BY date_image DESC');

$req->execute(array($_SESSION['user_id']));

$num_rows = $req->rowCount();
if ($num_rows == 0) {
echo "il n'existe aucune image";
}
else {
// si on a des image on l'affiche avec la date, et le pseudo de l'utilisateur
?>

<section style="height:auto;">
<div id="tablo">
<?php
echo"vous avez ".$num_rows." images <br/><br/>";
while ($data = $req->fetch()) {
$id= $data['id_image'];

?>
<table>
<tr> <td class="c"> <span class="pseudo"><?php echo stripslashes(htmlentities(trim($data['moi']))); ?></span>

<tr> <td class="c" style="height: 50px;">

<p><!--<img src="img.png" style=" width:55px; hight:45px;"/>-->
<span class="msg"> <?php echo "<img src='".$data['image']."' width='260' height='270' />"; ?>
<?php echo"<a href='image_telecharger.php?id_image=$id' style='margin-left:20px'>Télécharger</a><br/>" ?>
</p></span></td></tr>

<tr><td class="c"><span class="date"><?php echo $data['date_image']; ?></span></td> </tr>

</table>
<?php

}
}
$req->closeCursor();
?>
</div>
</section>
</body>
</html>


page: image_telecharger.php

<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=facile', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}



$sql = $bdd->prepare('SELECT image FROM images WHERE id_image = ?');
$sql->execute (array($_GET['id_image']));


$data = $sql->fetch();

header('Content-description : File transfer');
header('Content-type : application/octet-stream');
header('Content-Disposition : attachment; filename="image.jpg" ');
header('Content-length : '.filesize ('upa/'.$data['image']) );
ob_clean();
readfile('upa/'.$data['image']);

?>
0
Utilisateur anonyme
27 mars 2015 à 14:56
J'avoue que je ne vois pas très bien d'où ça peut venir.
Peux-tu voir avec la console de ton navigateur quelles en-têtes on été reçues ?

Je suppose que ce message d'erreur apparaît quand tu cliques sur ton lien "Télécharger".
Est-ce uniquement quand tu cliques sur le lien, ou l'as-tu aussi quand tu tapes directement image_telecharger.php?id_image=qqchose dans ton navigateur ?
0
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015
Modifié par ghizou2194 le 27/03/2015 à 15:28
en fait avant le code marché bien avec des fichiers/images
mais lorsque j'ai remplacer

@$file = $_FILES['image']['name'];

par l'URL (afin d'afficher cette image sur la page )

@$lien='http://localhost/facile/publier/upa/'.$_FILES["image"]["name"];

l'erreur est apparue
j'ai enlevé la partie :

header('Content-length : '.filesize ('upa/'.$data['image']) );

ça se télécharge mais quand je clique pour ouvrir l'image une icone blanche avec une croix rouge apparait
0
Utilisateur anonyme
27 mars 2015 à 15:55
Peux-tu répondre à mes questions ?

La page image_publier.php s'affiche-t-elle correctement?
0
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015
27 mars 2015 à 17:07
désolé j'ai pas vu votre question
oui bien sur la page image_publier.php s'affiche correctement
0
Utilisateur anonyme
27 mars 2015 à 17:16
Quand tu tapes directement image_telecharger.php?id_image=qqchose dans ton navigateur (avec un bon id à la place de qq chose), qu'est-ce qui se passe ?
0
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015
27 mars 2015 à 18:38
toujours la même chose le même message du navigateur
En-têtes doubles envoyés par le serveur

je crois que je vais laisser l'utilisateur simplement enregistrer l'image au lieu de la télécharger
par contre j'ai une autre question si cela ne vous dérange pas bien sure

en fait je veux faire une jointure entre 4 tables (user,statuts,myfiles,images )

voici la requête



$req = $bdd->query ('SELECT user.pseudo as moi , statut,image,fichier,date_statut,date_image,date_fichier , id_statut,id_image,id_fichier
FROM user

INNER JOIN statuts ON statuts.id_auteur = user.user_id

INNER JOIN images ON images.id_auteur = user.user_id

INNER JOIN myfiles ON myfiles.id_auteur = user.user_id
'
);



Je veux afficher tout les membres avec leurs publications (statuts ,images,fichiers)

Le problème c'est que ça m'affiche seulement les statuts,fichiers,images du membre connecté pourtant je n'ai pas mis de condition

Merci pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
27 mars 2015 à 20:49
je crois que je vais laisser l'utilisateur simplement enregistrer l'image au lieu de la télécharger
Je ne vois pas le rapport, où alors il y a un gros point qui m'a échappé.
Qu'entends-tu par "enregistrer" et "télécharger" ? Peux-tu préciser quel est le sens du transfert (client vers serveur ou serveur vers client) que tu mets derrière chacun de ces mots ? Car de puis le début, pour moi, ton problème se situe dans le sens serveur vers client uniquement, l'autre sens n'a aucun rapport.
En ce qui concerne ton problème de jointure, si tu ne vois que le membre connecté, c'est peut-être que tu essayes toujours avec le seul qui a à la fois des statuts, des images et des fichiers. Avec des INNER JOIN au lieu de LEFT JOIN (au moins sur la première jointure), tu ne sors que ceux qui ont quelque chose dans toutes les tables.
0
ghizou2194 Messages postés 9 Date d'inscription jeudi 26 mars 2015 Statut Membre Dernière intervention 23 septembre 2015
27 mars 2015 à 21:53
Bonsoir merci beaucoup pour la solution de la jointure cela m'a échappé
pour l'image voici un lien contenant une photo illustrant ce que je veut faire j'espère que ça sera plus clair
https://ghizouta-ghizou.skyrock.com/3247553250-posted-on-2015-03-27.html
0