Forcer le téléchargement de gros fichier
Truoris
Messages postés
17
Statut
Membre
-
Truoris Messages postés 17 Statut Membre -
Truoris Messages postés 17 Statut Membre -
Salutations,
Je voudrait pouvoir télécharger des fichiers jusqu'à 300Mo avec mon code. Mais, quand j'essai de download un fichier de 169Mo cela me met le message d'erreur suivant :
Allowed memory size of 134217728 bytes exhausted (tried to allocate 177336321 bytes) ... on line 13.
Voici mon code :
<?php
$fichier = $_GET['nom'];
$chemin = $fichier;
if (file_exists($chemin))
{
header('Content-disposition: attachment; filename="' . $fichier . '"');
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. filesize($chemin));
header('Pragma: no-cache');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($chemin);
}
else
{
$erreurFichier = 'le fichier ' . $fichier . ' n\'existe pas. Veuillez-nous excusez pour le désagrément.';
echo $erreurFichier;
}
?>
Quelques infos :
- Je travail en local (wamp)
- J'utilise IE
- ma variable $_GET['nom'] contient le nom du fichier à download (qui se trouve dans le même dossier que la page de download donc, $chemin = $nom je me trompe pas?)
Voilà, ce code ne marche, auriez vous des conseils à me donner pour qu'il fonctionne.
Merci d'avance,
Truoris
Je voudrait pouvoir télécharger des fichiers jusqu'à 300Mo avec mon code. Mais, quand j'essai de download un fichier de 169Mo cela me met le message d'erreur suivant :
Allowed memory size of 134217728 bytes exhausted (tried to allocate 177336321 bytes) ... on line 13.
Voici mon code :
<?php
$fichier = $_GET['nom'];
$chemin = $fichier;
if (file_exists($chemin))
{
header('Content-disposition: attachment; filename="' . $fichier . '"');
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. filesize($chemin));
header('Pragma: no-cache');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($chemin);
}
else
{
$erreurFichier = 'le fichier ' . $fichier . ' n\'existe pas. Veuillez-nous excusez pour le désagrément.';
echo $erreurFichier;
}
?>
Quelques infos :
- Je travail en local (wamp)
- J'utilise IE
- ma variable $_GET['nom'] contient le nom du fichier à download (qui se trouve dans le même dossier que la page de download donc, $chemin = $nom je me trompe pas?)
Voilà, ce code ne marche, auriez vous des conseils à me donner pour qu'il fonctionne.
Merci d'avance,
Truoris
Configuration: Windows 7 Internet Explorer 7.0
4 réponses
-
ca fait environ 128mo = 134217728 bytes
Ca doit venir de ton serveur. -
Je travail en local sur mon ordi avec Wamp Server et j'ai 100Go de libre sur mon disque.
-
C'est un problème de config d'Apache.
Il faut augmenter cette valeur. Le problème est que readfile charge tout en mémoire vive,
donc ca rame...
Il faut passer par une autre fonction : fpassthru()
cherche sur le net sur cette fonction php.
Grag -