le 28/03/2008 à 20:16
frob
Bonjour, le message est en partie pour LA GLOBULE ou autres personnes qui comprends cette théorie. J'ai trouvé plusieurs codes sur le net pour faire cette opération mais comme à chaque occasion il faut sortir notre esprit critique et en choisir un qui semble complet, concis et structuré selon de bons critères de programmations.
Bref j'ai choisi celui de LA GLOBULE (bravo :-) ) mais je n'arrive pas à saisir la théorie à partir de la ligne #45 La constante DL_BUFFER , la boucle et l'echo.
Enfin, j'aimerais une recommandation à savoir la manière idéale pour appeler cette fonction (endroit et balises)
Alors si quelqu'un d'aimable pourrait mettre quelques commentaires au code, j'apprécierais beaucoup.
Un gros merci
Frob
- $filename : le nom que tu veux donner au fichier
- $blob : le contenu binaire du fichier (récupérable avec un file_get_contents)
Bref j'ai choisi celui de LA GLOBULE (bravo :-) ) mais je n'arrive pas à saisir la théorie à partir de la ligne #45 La constante DL_BUFFER , la boucle et l'echo.
Enfin, j'aimerais une recommandation à savoir la manière idéale pour appeler cette fonction (endroit et balises)
Alors si quelqu'un d'aimable pourrait mettre quelques commentaires au code, j'apprécierais beaucoup.
Un gros merci
Frob
<?php
define ('DL_BUFFER', 16384);
function download ($blob, $filename) {
$filename = ereg_replace('[\\/:\*\?"<>\|;]', '_', str_replace(' ', ' ', $filename));
$isIE = $isIE6 = false;
if (isset($_SERVER["HTTP_USER_AGENT"])) {
$HTTP_USER_AGENT = $_SERVER["HTTP_USER_AGENT"];
if (strstr($HTTP_USER_AGENT, 'compatible; MSIE ') !== false && strstr($HTTP_USER_AGENT, 'Opera') === false) {
$isIE = 1;
}
if (strstr($HTTP_USER_AGENT, 'compatible; MSIE 6') !== false && strstr($HTTP_USER_AGENT, 'Opera') === false) {
$isIE6 = 1;
}
}
header('Pragma: ');
header('Cache-Control: cache');
if ($isIE) {
$filename = rawurlencode($filename);
header ("Pragma: public");
header ("Cache-Control: no-store, max-age=0, no-cache, must-revalidate");
header ("Cache-Control: post-check=0, pre-check=0", false);
header ("Cache-Control: private");
header ("Content-Disposition: inline; filename=$filename");
}
header ("Content-Type: application/octet-stream; name=\"$filename\"");
header ("Content-Disposition: attachment; filename=\"$filename\"");
if ($isIE && !$isIE6) {
header ("Content-Type: application/download; name=\"$filename\"");
}
else {
header ("Content-Type: application/octet-stream; name=\"$filename\"");
}
$size = strlen($blob);
$nb = ($size/DL_BUFFER);
$reste = ($size%DL_BUFFER);
for ($a=0; $a<$nb; $a++) {
echo substr($blob, $a*DL_BUFFER, DL_BUFFER);
flush();
}
echo substr($blob, -$reste);
flush();
}
?>
- $filename : le nom que tu veux donner au fichier
- $blob : le contenu binaire du fichier (récupérable avec un file_get_contents)