[PHP]probleme pour le telechargement

Résolu/Fermé
louisss13 Messages postés 3 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009 - 22 sept. 2009 à 16:31
louisss13 Messages postés 3 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009 - 27 sept. 2009 à 23:45
Bonjours tout le monde :p

J'ai un petit problème ... j'essaye de faire un système qui permet d'uploader des fichier pour ensuite les mettre en téléchargement sur une autre page. Le système d'upload a l'air de fonctionner correctement (le fichier se retrouve bien sur le ftp avec une bonne taille de fichier). Par contre quand je veut lire le fichier,après un très long chargement, il me propose bien de le télécharger mais me télécharge un fichier "cassé" (j'ai ouvert l'original et le télécharger sur notepad et le fichier télécharger a le même début mais n'a pas du tout la fin ...).

Le téléchargement et l'upload fonctionne parfaitement en local. Et mon hébergeur permet le download et l'upload.

Voici le code pour la lecture


	

<?php
/*	TELECHARGEMENTS.PHP	*/
session_start();



function sel_fichier()
{
	include("includes/identifiants.php");
	mysql_connect($adresse, $nom, $motdepasse);
	mysql_select_db($database);
	mysql_query('set names utf8');
	
	$fichier_en_telechargement_sql = mysql_query('SELECT * FROM telechargements WHERE tel_id='.intval($_GET['file']))or die(mysql_error());
	$fichier_en_telechargement = mysql_fetch_array($fichier_en_telechargement_sql);
	
	mysql_close();
	
			$nom = intval($fichier_en_telechargement['tel_id']) ;
			$ext = stripslashes(htmlspecialchars($fichier_en_telechargement['tel_extension'])) ;
			$taille = stripslashes(htmlspecialchars($fichier_en_telechargement['taille'])) ;
			$chemin = htmlspecialchars($fichier_en_telechargement['tel_chemin']);
			$nom_reel = stripslashes(htmlspecialchars($fichier_en_telechargement['tel_nom_fichier']));
			$type = stripslashes(htmlspecialchars($fichier_en_telechargement['tel_type']));
			
	  header('Content-Type: '.$type);
	  header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier)
	  header('Content-Disposition: attachment; filename="'.$nom_reel.'.'.$ext.'"'); //Nom du fichier
	  header('Content-Length: '.$taille); //Taille du fichier
	 
	//Envoi du fichier dont le chemin est passé en paramètre
		$chemin = dirname(__FILE__).'/telechargements/'.$nom;
	  readfile($chemin);
	  
}
function affichage_tout_fichier()
{
	echo '<h1>Tous les téléchargements.</h1>';
	
	if($_SESSION['users_level']==5)
		echo'<a href="Admin_upload.php">Ajouter un fichier à la liste</a>';
	
	$fichiers_sql = mysql_query('SELECT * FROM telechargements ORDER BY tel_nom_fichier')or die(mysql_error());
	$i=0;
	echo'<div class="telechargement">';
		echo'<table class ="tableau_forum ">';
		while($fichiers = mysql_fetch_array($fichiers_sql))
		{
			echo'<tr>';
				echo '<td>-  <a href="telechargements.php?file='.intval($fichiers['tel_id']).'">'.$fichiers['tel_nom_fichier'].'</a></td>';
				echo '<td><a href="telechargements.php?file='.intval($fichiers['tel_id']).'">( Fichier '.$fichiers['tel_extension'].' de '.$fichiers['tel_taille'].' octets)</a></td>';
				$i++;
			echo'</tr>';
		}
		echo'</table>';
		if($i==0)
			echo'Il n\'y a aucun fichier à télécharger<br/><br/><br/>';
		
	echo'</div>';
	if($_SESSION['users_level']==5)
		echo'<a href="Admin_upload.php">Ajouter un fichier à la liste</a>';
	
}
if(isset($_GET['file']))
	sel_fichier();
else
{
include("includes/haut.php");
	affichage_tout_fichier();
include("includes/bas.php");
}
?>





merci d'avance pour votre aide :p
A voir également:

4 réponses

Archeus01 Messages postés 1567 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 447
22 sept. 2009 à 16:47
Et avec des fichiers de toute petite taille? (genre un texte contenant juste "hello world")?
0
louisss13 Messages postés 3 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009
22 sept. 2009 à 16:56
Le temp de chargement est toujours aussi long mais le fichier .txt est entier :p
0
Archeus01 Messages postés 1567 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 447
27 sept. 2009 à 23:39
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);

extrait de https://www.php.net/readfile
Si tu rajoutes ob_clean(); et flush();, ça améliore quelquechose?
0
louisss13 Messages postés 3 Date d'inscription mardi 22 septembre 2009 Statut Membre Dernière intervention 27 septembre 2009
27 sept. 2009 à 23:45
Non sa n'a rien améliorer (j'ai deja essayer :p) mais par contre en rajoutant les headers que je n'avais pas sa marche ... :)
0