Bonjour,

Je me suis entraîné à faire des pages d'upload/download. Je parviens à uploader des fichiers de taille variable mais quand on en vient au download dès que les fichiers deviennent un peu volumineux vers les 100mo, chrome me télécharge un fichier de 0 octets. Pourtant le chemin d'accès ainsi que la taille du fichier contenues dans mes variables sont bien les mêmes que ceux d'origines, j'ai vérifié. Et le download marche pour des fichiers de petites tailles, je me demande donc si PHP ne met pas également une limite en download ?

Voici le code du script de download :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
session_start();
//recherche d'informations dans la bdd en fonction du type
 
	if(isset($_GET['id']) and isset($_GET['path']) and isset($_GET['type']) )
	{
		$nom = (string)$_GET['path'];
		if(preg_match('#etet#i', $nom)) // pour '&'
		{
			$nom = preg_replace('#etet#i', '&', $nom);
		}
 
		try
		{
			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
			$bdd = new PDO('mysql:host=localhost;dbname=cintellect', 'root', '', $pdo_options);
 
			switch($_GET['type'])
			{
				case 'jeux' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM jeux WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE jeux SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
				case 'logiciels' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM logiciels WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE logiciels SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
				case 'videos' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM videos WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE videos SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
				case 'musiques' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM musiques WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE musiques SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
				case 'ebooks' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM ebooks WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE ebooks SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
				case 'images' :
				$requete = $bdd->prepare('SELECT localisation AS chemin, nombreDownload AS nbDownloads FROM images WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->execute();
				$donnees = $requete->fetch();
				$requete = $bdd->prepare('UPDATE images SET nombreDownload=:nbDownloads WHERE id=:id');
				$requete->bindValue(':id', $_GET['id'],PDO::PARAM_INT);
				$requete->bindValue(':nbDownloads', ($donnees['nbDownloads'] + 1),PDO::PARAM_INT);
				$requete->execute();
				break;
			}
 
//-------------------------------------------------------------------
 
 
// Construction du chemin du fichier et l'envoie			
			$chemin = $donnees['chemin'].'\\'.$nom;
 
			//Création des headers, pour indiquer au navigateur qu'il s'agit d'un fichier à télécharger
			header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier)
			header('Content-Disposition: attachment; filename="'.$nom.'"'); //Nom du fichier
			header('Content-Length: '.filesize($chemin) ); //Taille du fichier
 
			//Envoi du fichier dont le chemin est passé en paramètre
			readfile($chemin);
		}
		catch(Exception $e)
		{
			die('Erreur : '.$e->getMessage());
		}
	}
 
?>