Bonjour,
J'ai édité le fichier et ça indique :
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 80259072 bytes) in <b>/home/site/public_html/acces.php on line 51
Voici le script de téléchargement (il s'agit du script fourni par Allopass) :
<?php
$RECALL=$HTTP_GET_VARS["RECALL"];
if (trim($RECALL)=="")
{
// La variable RECALL est vide, renvoi de l'internaute
//vers une page d'erreur
header("Location: erreur.html");
exit;
}
// $RECALL contient le code d'accès
$RECALL = urlencode($RECALL);
// $AUTH doit contenir l'identifiant de VOTRE document
$AUTH = urlencode("54/75/456");
// $FICHIER_LOCAL doit contenir le chemin et le nom du fichier
//à téléchargé présent sur votre site
$FICHIER_LOCAL = "mes_fichiers/monfichier.zip";
// $FICHIER_INTERNAUTE doit contenir le nom du fichier qui sera créé sur
//l'ordinateur de l'internaute
// Ce nom ne doit pas être forcément le même que le nom du fichier local !
$FICHIER_INTERNAUTE = "lefichier.zip";
// envoi de la requête vers le serveur AlloPAss
// afin de vérifier le code d'accès de l'internaute.
// Dans la variable $r[0] on aura la réponse du serveur
$r=@file("http://www.allopass.com/check/vf.php4?CODE=$RECALL&AUTH=$AUTH");
// on test la réponse du serveur
if (ereg("ERR",$r[0]) || ereg("NOK",$r[0]))
{
// Le serveur a répondu ERR ou NOK : l'accès est donc refusé
header("Location: erreur.html");
exit;
}
// Le code est valide : on lance le téléchargement du fichier
if (file_exists($FICHIER_LOCAL)==true)
{
if (strstr($HTTP_USER_AGENT,"MSIE"))
$attachment="";
else
$attachment=" attachment;";
header( "Content-type: application/octet-stream" );
header( "Content-Disposition:$attachment filename=$FICHIER_INTERNAUTE");
header( "Content-Description: File Transfert" );
header( "Content-Length: ".filesize($FICHIER_LOCAL)."");
readfile($FICHIER_LOCAL);
exit;
}
?>
Il a toujours fonctionné mais j'ai changé de serveur chez mon hebergeur recemment.
Voici la réponse de mon hébergeur justement à ce sujet :
nous avons eu exactement le même problème récemment avec un de nos client qui utilise le même système.
Ce qui semble se passer c'est que vos scripts chargent complètement les fichiers via PHP avant de les rendre disponible au téléchargement.
Ainsi, la limite de ressources mémoires allouée à PHP est très vite épuisée dès que les fichiers grossissent.
Je vous ai donc monté la valeur du memory_limit de PHP jusqu'à 256Mo au lieu de 32Mo.
Concrètement, cela implique que si demain vous mettez à disposition des fichiers de 300Mo, le téléchargement échouera comme avant.
Il risque donc d'être utile de revoir vos scripts afin d'utiliser la fonction readfile (ex: readfile($FICHIER_LOCAL)) avec plus de parcimonie.
Le problème a donc été réglé temporairement.
Il s'agirait donc bien du script qui ne fonctionnerait pas avec la configuration de mon serveur ou en tous cas emploierait donc maintenant trop de ressources.
Comment pourrais-je l'optimiser, en particulier pour la fonction readfile ?