Pièce jointe dans messagerie interne

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 : Pièce jointe dans messagerie interne

Re: Pièce jointe dans messagerie interne

par moimeme30 » 10 juil. 2014, 20:30

J'ai essayé mais ca plante encore.
d'ailleurs, quand je teste Content-Type:image/png sur un fichier png le téléchargement fonctionne mais l'image n'apparait pas.
Peut etre que j'ai un soucis au niveau de la base de données.
j'enregistre image.png dans la colonne piece_jointe.
faut il séparer le nom et l'extension?

Re: Pièce jointe dans messagerie interne

par Elie » 10 juil. 2014, 20:01

Moi je change le type pour chaque extension ... Essaye
	// on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions
	switch(strrchr(basename($_GET['fichier']), ".")) {
	
		case ".gz": $type = "application/x-gzip"; break;
		case ".tgz": $type = "application/x-gzip"; break;
		case ".zip": $type = "application/zip"; break;
		case ".pdf": $type = "application/pdf"; break;
		case ".png": $type = "image/png"; break;
		case ".gif": $type = "image/gif"; break;
		case ".jpg": $type = "image/jpeg"; break;
		case ".txt": $type = "text/plain"; break;
		case ".htm": $type = "text/html"; break;
		case ".html": $type = "text/html"; break;
		default: $type = "application/octet-stream"; break;
	
	}
	
	header("Content-disposition: attachment; filename=".$_GET['fichier']);
	header("Content-Type: application/force-download");
	header("Content-Transfer-Encoding: ".$type."\n"); // Surtout ne pas enlever le \n
	header("Content-Length: ".filesize($chemin.$_GET['fichier']));
	header("Pragma: no-cache");
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
	header("Expires: 0");
	readfile($chemin.$_GET['fichier']);

Re: Pièce jointe dans messagerie interne

par moimeme30 » 10 juil. 2014, 18:27

Merci Elie,
J'ai essayé ton code ainsi que celui du tuto, mais je me retrouve avec le même probleme.
Dès que le format du fichier est xls, doc, png... ca ne fonctionne pas.
Parc contre, les fichiers txt et pdf sont téléchargés.

Re: Pièce jointe dans messagerie interne

par Elie » 10 juil. 2014, 17:46

Ah ! Regarde ici : http://fr.openclassrooms.com/informatiq ... e-fichiers
<?php
function telecharger_fichier($fichier)
{
 $chemin = 'fichiers/' . $fichier;
 $images_ext = array('jpg', 'jpeg', 'png', 'bmp', 'gif');
 if(file_exists($chemin))
 {
  $image_format = substr(strrchr($chemin, '.'), 1);
  if(in_array($image_format, $images_ext))
   header('Content-Type: image/' . $image_format);
  else
  {
   header('Content-Description: File Transfer');
   header('Content-Type: application/octet-stream');
   header('Content-Disposition: attachment; filename=' . basename($chemin));
   header('Content-Transfer-Encoding: binary');
   header('Expires: 0');
   header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   header('Pragma: public');
   header('Content-Length: ' . filesize($chemin));
  }
  readfile($chemin);
  exit;  
 }
 else
  require('erreur.php');
}
?>

Re: Pièce jointe dans messagerie interne

par moimeme30 » 10 juil. 2014, 17:00

Je ne veux pas ouvrir la pièce jointe, je désire forcer le téléchargement.
D’où le script

Re: Pièce jointe dans messagerie interne

par Elie » 10 juil. 2014, 16:46

Bah pour afficher une image tu uilises du HTML avec la balises <img /> et les navigateur n'affiche pas les fichiers Excel sur une page ...
Donc c'est un peu compliqué ce que tu nous demande ... Ta logique est pas bonne quoi.

Pièce jointe dans messagerie interne

par moimeme30 » 10 juil. 2014, 13:29

Bonjour,

Je suis en train de réaliser une messagerie interne à mon site.
Il y a la possibilité pour l'utilisateur d'envoyer des pièces jointes de différente nature (xls, doc, txt, jpg, pdf, etc...)
Pour les fichiers txt et pdf ca fonctionne, par contre les fichiers png, xls etc sont téléchargés mais pas utilisables (png => La galerie de photos ne peut ouvrir cette photo..., xls => encodage bizarre etc...)
Voici mon code:
session_start();

//var_dump($_POST['piece_jointe'],file_exists('pieces_jointes/'.$_POST['piece_jointe']),filesize('pieces_jointes/'.$_POST['piece_jointe']));die();
 
if (isset($_POST['id']) AND isset($_POST['piece_jointe']) AND isset($_POST['token_lect_mess']) ) {
    if($_SESSION['token_lect_mess'] == $_POST['token_lect_mess']) {
     
            $piece_jointe = $_POST['piece_jointe'];    
                header('Content-type: application/force-download');
                header('Content-Disposition: attachment; filename="'.$piece_jointe.'"');
                readfile('pieces_jointes/'.$piece_jointe.'');
    }
    else {
        header ("Refresh: 1;URL=index.php");
        echo "<div class='apres_valid'>Token erroné.</div>";
    }
}
else{
header ("Location: index.php");
}
Quelqu'un a une idée svp?