Problème de mise en cache dans la mémoire (php& apache)
cs_oshin
Messages postés50Date d'inscriptionsamedi 11 janvier 2003StatutMembreDernière intervention 8 août 2009
-
3 août 2008 à 09:51
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
3 août 2008 à 13:23
Salut à tous,
J'ai un GROS problème URGENT.
J'ai un serveur dédié avec apache et php installé :
Apache/1.3.37 (Unix) mod_gzip/1.3.19.1a PHP/4.4.4 mod_ssl/2.8.28 OpenSSL/0.9.6m
et sur mon serveur web tourne un script d'upload et donc, avec des liens de download pour télécharger ces mêmes fichiers..
Mon problème est le suivant :
Lorsque quelqu'un clique pour TELECHARGER un fichier, apache ou php, le charge en mémoire avant de lancer le téléchargement. Sur de petit fichier ça ne pose aucun problème, mais sur des gros fichiers de 700mo, ça démoli toute la ram et le swap...
Ma question est la suivant :
Quel réglage dois je faire sur php ou apache pour arrêter cette mise en cache des données en mémoire ? Je n'arrive pas à trouver et google ne m'a guerre aidé.. !
A voir également:
Problème de mise en cache dans la mémoire (php& apache)
cs_oshin
Messages postés50Date d'inscriptionsamedi 11 janvier 2003StatutMembreDernière intervention 8 août 2009 3 août 2008 à 11:28
Voici le code de la page qui lance le téléchargement.
En faite... c'est le readfile qui charge en mémoir le fichier avant..
mais en local sur mon ordinateur sous php5 et apache2 j'ai pas ce probleme.. je pense pas que ça vienne du fait que j'ai php4 ?
// ip a bloquer - chaque ip separé par une virgule
$upload_cfg['_ip_blackliste'] = generate_banlist($upload_cfg['_rep_script'].'/includes/');
}
else
exit('Le fichier config.php n\'est pas au bon endroit.');
// utilisateurs de FREE : penser à creer un repertoire sessions à la racine de votre site
session_start();
// est ce que l'on est dans la liste des ip banni ?
if(in_array($_SERVER['REMOTE_ADDR'],$upload_cfg['_ip_blackliste']))
exit('Votre IP est banni du service de téléchargement.
');
// est ce que l'on demnde un mot de passe pour accéder au système d'upload ?
if($upload_cfg['_use_password_view'] === true)
{
if((!isset($_SESSION['myphpupload_user_password']) || $_SESSION['myphpupload_user_password'] != $upload_cfg['_user_password']) && !check_connexion($upload_cfg['_admin_login'], $upload_cfg['_admin_pass']))
{
include('./connexion.php');
exit();
}
}
// on recupere l'id du fichier à affiché
if(!isset($_GET['i']) || empty($_GET['i']))
exit("Paramètres manquants");
else
$id = quote_smart($_GET['i']);
$requete = "SELECT id,ref,date,file,ip,nbr_view,nbr_dl FROM ".$upload_cfg['_sqltable']." WHERE ref='$id'";
$sql = mysql_query($requete);
$nbr = mysql_num_rows($sql);
// on doit verifier que le fichier existe belle et bien. on pourrai avoir supprime le fichier mais pas l'enregistrement dans la base
if(!file_exists($upload_cfg['_rep_secret'].'/'.$fichier))
exit("Fichier inexistant");
// y'a t'il une limitation sur temps ?
$now = mktime();
if($upload_cfg['_limite'] == 1)
{
// si oui, on test la validité
$max_validite = $date + $upload_cfg['_limite_validite'];
if($max_validite < $now && !check_connexion($upload_cfg['_admin_login'], $upload_cfg['_admin_pass']))
exit("Fichier périmé");
}
// incremente de +1 les telechargements
$nbr_dl = ($post['nbr_dl']+1);
mysql_query("UPDATE ".$upload_cfg['_sqltable']." SET nbr_dl='$nbr_dl' WHERE ref='$id'");
// le nom de fichier
$filename = substr($fichier,32);
// son extension
$ext = get_file_ext($fichier);
// selon l'extension on choisi le type d'entete a declarer
switch($ext) {
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 "psd": $type = "application/psd"; break;
case "eps": $type = "application/eps"; 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;
}
// on envoi les entetes - important pour que le telechargement se lance meme si le navigateur voudrai l'ouvrir.
header("Content-disposition: attachment; filename=".$filename);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n");
header("Content-Length: ".filesize($urlFichier));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
// on lance le telechargement
readfile($urlFichier);
cs_oshin
Messages postés50Date d'inscriptionsamedi 11 janvier 2003StatutMembreDernière intervention 8 août 2009 3 août 2008 à 12:30
Effectivement, le problème vient de php4 qui fait "chier",
le problème c'est que j'ai un dédie redhat 7.2 de chez ovh... une usine à gaz, pour installer php5 la dessus, c'est la merde. Grr -_-
Je crois que je vais installer debian et faire une install propre avec ce que j'ai besoin :P
Vous n’avez pas trouvé la réponse que vous recherchez ?