Bonjour à tous,
Lors de la création d'un script php forçant le téléchargement d'un fichier, je rencontre un problème empêchant le script de fonctionner...
Je m'explique:
nous disposons de 3 serveurs - 2 dédiés (xy et xz) hébergeant les fichiers et un mutualisé (ddl). Le script forçant le téléchargement se trouve sur ddl.
La première partie se passe bien mais au cours du téléchargement un problème arrête le téléchargement...
Les hypothèses avancées étant:
1)timeout (temps d'exécution maximale du script sur ddl 18 secondes)
2)taille mémoire excessive (la taille mémoire allouée par script est de 6 mo)
Cependant aucune des 2 hypothèses n'est à mon avis réaliste car si l'on essaye de télécharger le fichier en limitant le débit à 1ko/s ou 10ko/s le temps de 18 secondes peut être amplement dépassé.
voici le script
Petite précision<?php
function url_exists($url)
{
$handle = @fopen($url, "r");
if ($handle === false)
return false;
fclose($handle);
return true;
}
$server="localhost";
$user="user";
$pass="pass";
$base="base";
$link=@mysql_connect($server,$user,$pass)
or die("Connexion impossible".mysql_error ());
@mysql_select_db($base)
or die("impossible d'accéder à $base");
$id=$_GET['did'];
$sql= 'SELECT durl1,durl,dfilesize FROM `downloads` WHERE did="'.$id.'"';
$req = mysql_query($sql)
or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
$fichier = $data['durl1'];
$filename=$data['durl'];
$len=$data['dfilesize'];
mysql_free_result ($req);
mysql_close ();
if (url_exists($fichier)) {
header("Content-disposition: attachment; filename=$filename");
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header("Content-Length: $len");
readfile($fichier);
}
else {
echo "Erreur 404";
}
?>
1)les fichiers pèsent entre 160mo et 180mo
2)il ne s'agit nullement de warez...(les fichiers sont libres)
3)les fonctions permétants de restter le watchdog de php sont désactivées.
4)aucune mention d'erreur n'est faite sur la sortie standard
La question étant : y a il un moyen simple pour
1)connaitre précisément le problème
2)le résoudre
Merci d'avance
++
PS: j'espère ne pas avoir enfreint trop de règles lors de mon premier post
Partager