begin process at 2012 05 28 21:08:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Forcer un téléchargement (pas forcement simple)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Forcer un téléchargement (pas forcement simple)

lundi 23 novembre 2009 à 11:29:35 | Forcer un téléchargement (pas forcement simple)

La Guite


Bonjour à tous,

Je cherche a forcer le téléchargement d'un fichier image de 3 à 4Mo (sur mon site hébergé chez free.

Avec une recherche google, on trouve facilement ce genre de code :
Code PHP :
	// Envoi du fichier
	header('Content-Transfer-Encoding: none');
	header('Content-Type: application/octetstream; name="'.$name.'"');
	header('Content-Disposition: attachment; filename="'.$name.'"');
	header('Content-length: '.filesize($lien));
	header("Pragma: no-cache"); 
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
	header("Expires: 0"); 
	@readfile($lien) OR die();


Ou même
Code PHP :
	header("Content-type: application/force-download");
	header("Content-Disposition: attachment; filename=".$name);
	readfile($lien);

Ou encore
Code PHP :
	switch(strrchr(basename($lien), ".")) {
	case ".png": $type = "image/png"; break;
	case ".gif": $type = "image/gif"; break;
	case ".jpg": $type = "image/jpeg"; break;
	default: $type = "application/octet-stream"; break;
	}

	header("Content-disposition: attachment; filename=".$name); 
	header("Content-Type: application/force-download"); 
	header("Content-Transfer-Encoding: image/jpeg\n");
	header("Content-Length: ".filesize($lien)); 
	header("Pragma: no-cache"); 
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
	header("Expires: 0"); 
	readfile($lien); 


Ces codes fonctionnent en partit. Ils m'ouvre pas de nouvelle fenêtre et me propose d'enregistrer le fichier. Sur le serveur (en local tout marche bien), lorsqu'une personne télécharge l'image elle est à tous les coups corrompus. J'ai soit une demi photo (l'autre moitier est totalement grise), soit un décalage de la photo (décalage de couleur et/ou de position).

Aucune photo télécharger n'est donc correct.

Quelqu'un sait pourquoi ce phénomène m'arrive ?
Y a t'il une solution ?


La Guite
mardi 24 novembre 2009 à 15:39:35 | Re : Forcer un téléchargement (pas forcement simple)

Mcjo

Membre Club
Essaie ça:
Code PHP :
switch(strrchr(basename($lien), ".")) {
	case ".png": $type = "image/png"; break;
	case ".gif": $type = "image/gif"; break;
	case ".jpg": $type = "image/jpeg"; break;
	default: $type = "application/octet-stream"; break;
}

	header("Content-disposition: attachment; filename=".$name); 
	header("Content-Type: $type"); 
	header("Content-Length: ".filesize($lien));
        header('Content-Transfer-Encoding: binary');
	header("Pragma: no-cache"); 
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
	header("Expires: 0"); 
	readfile($lien); 
        ob_clean();
        flush();
        readfile($file);
        exit;



header("Content-Transfer-Encoding: image/jpeg\n");
ne semble pas bon.
mardi 24 novembre 2009 à 17:58:42 | Re : Forcer un téléchargement (pas forcement simple)

La Guite


Même problème....

(j'ai enlevé un readfile($lien) qui je pense, était là par mégarde)

J'ai comme l'impression qu'il arrête le téléchargement à un certain moment.
Chose étrange, la miniature de la photo téléchargé est correcte, quand on l'affiche plein écran il en manque la moitier (ou plus ou moins).

Je désespère un peu quand même.


La Guite
mardi 24 novembre 2009 à 18:19:26 | Re : Forcer un téléchargement (pas forcement simple)

Mcjo

Membre Club
Essaie de remplacer le
readfile($file);

par
$fp = fopen($file, "r");
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);

echo $contents;
mercredi 25 novembre 2009 à 09:57:24 | Re : Forcer un téléchargement (pas forcement simple)

La Guite


Toujours le même problème.

J'ai comme l'impression que le problème vient du téléchargement.
On dirait qu'au bout d'un certain temps, le téléchargement s'arrête, ce qui casse mon image.
Ce qui expliquerait qu'en local je n'ai pas ce problème.

Surement un problème avec mon hébergeur ?

La Guite
mercredi 25 novembre 2009 à 10:24:56 | Re : Forcer un téléchargement (pas forcement simple)

Mcjo

Membre Club
En effet, vérifie avec la fonction phpinfo(), la taille de "memory_limit" et "max_execution_time".
Si memory_limit est trop bas tu peux contourner le problème, en vidant régulièrement le buffer :


$fp = fopen($file, "r");
$contents = '';
while (!feof($fp)) {
ob_end_flush();
ob_flush();
flush();
ob_start();
echo fread($fp, 1024);
}
fclose($fp)
mercredi 25 novembre 2009 à 14:44:04 | Re : Forcer un téléchargement (pas forcement simple)

La Guite


Toujours le même problème. Voici le code utilisé :
Code PHP :
switch(strrchr(basename($lien), ".")) {
	case ".png": $type = "image/png"; break;
	case ".gif": $type = "image/gif"; break;
	case ".jpg": $type = "image/jpeg"; break;
	default: $type = "application/octet-stream"; break;
}

	header("Content-disposition: attachment; filename=".$name); 
	header("Content-Type: $type"); 
	header("Content-Length: ".filesize($lien));
        header('Content-Transfer-Encoding: binary');
	header("Pragma: no-cache"); 
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
	header("Expires: 0"); 

$fp = fopen($lien, "r");
$contents = '';
while (!feof($fp)) {
ob_end_flush();
ob_flush();
flush();
ob_start();
echo fread($fp, 1024);
}
fclose($fp);


Ton idée m'a fait pensé à un autre problème que j'ai rencontré : c'est la durée d'exécution d'une page php.
Grosso modo, lorsque le traitement du fichier est trop long, le serveur le stop.
Cela pourrait il venir de ça ?

Le problème c'est que je ne peut pas utiliser la méthode set_time_limit() ou même modifier le php.ini

PS: pourtant le téléchargement de la vidéo fonctionne bien et n'est pas duré dans le temps.

La Guite
mercredi 25 novembre 2009 à 18:24:55 | Re : Forcer un téléchargement (pas forcement simple)

Mcjo

Membre Club
Je ne vois qu'une solution.
Ouvre ta photo avec un éditeur hexa et regarde si tu as un message d'erreur d'execution à la fin du fichier.
Ou sous windows tu dois pouvoir le faire facilement avec debug
jeudi 26 novembre 2009 à 09:37:52 | Re : Forcer un téléchargement (pas forcement simple)

La Guite

Bizar, ce matin j'ai eu 1 seul échec sur 4 téléchargement.
Sur les originales comme les télécharger je n'ai rien vu de spécial en hexa.

J'ai bien l'impression que c'est pas le code le problème, mais le serveur (ce matin moins de charge donc réussit).

Du coup la je désespère plus....

La Guite
vendredi 27 novembre 2009 à 14:54:12 | Re : Forcer un téléchargement (pas forcement simple)

La Guite


Personne n'a d'idée que je pourrais creuser ?


La Guite


Cette discussion est classée dans : code, type, image, header, content


Répondre à ce message

Sujets en rapport avec ce message

Problème de header("Content-type: image/jpeg") [ par clemthecool ] Salut à tous,j'ai un 'ti soucis au niveau de l'affichage de mes utilisateurs inscrits dans mon annuaire LDAP.Mon annuaire marche correctement et j'arr Redirection apres avoir forcer le download [ par ASPerix ] Bonjour,J'ai une page 'download.php' avec le code:header("Content-disposition: attachment; filename=".$nom_fichier);header("Content-Type: application/ Header PNG louche? [ par MAsterC ] Salut à tous!dans mon index en tête j'ai mis ceci comme Header:header ("Content-type: image/png");Biensur apres.. avec ce code nous serons Header content-type *.avi [ par xactise ] bonjour j'aimerai bien savoir le content-type d'un fichier *.avi j'ai chercher sur google j'ai pas trouver grand chosesi vous avez un site qui reperto Header Content type [ par xactise ] Bonjours je voudrai savoir si toute les extension de fichier on un content-type ? parce que j'aimerai proposer en upload sur mon site des fichier a l' Récupération de fichiers impossible [ par beth2611 ] Bonjour, Voici mon problème, je tente désépérément de permettre la récupération de ichiers déposés sur le serveur, mais les header déjà inclus foncti problème avec header( 'Content-Type: application/msdoc' ) et images [ par zainatdi ] Bonjour, j'ai un probleme avec header( 'Content-Type: application/msdoc' ); je veux libré un fichier word aprtir de mon page web alors j'ai met hea probleme d'affichage d'image [ par niyio ] bonjour j'ai un petit souci: j'ai tester un code(de m@teo) et il m'affiche une image. mais le problème est quand j'intègre ce code dans une condition Récupérer nom d'une image [ par webalexpb ] Bonjour , j'essaie de faire un script de news avec titre, contenu , image , date, mais je n'arrive pas à récupérer le nom de l 'image uploadé pour la php variable et header [ par marine34000 ] Bonjour, J'ai déjà réussi a mettre des variables dans un header, mais la je ne comprend ps je n'y arrive plus j'ai un variable queje dois passer nor


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,769 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales