Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/12/2006, 15h09   #1
Invité régulier
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 6
Points : 6
Par défaut téléchargement d'un document

j'ai dans une première page "page1.php" un lien "a.pdf"
Code :
(<a href=\"telecharger.php?fichier=a.pdf\">)
ce lien est pour le telechargement du fichier "a.pdf"

le code du telecherger.php est le suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
$fichier=$_GET['fichier'];
switch(strrchr(basename($fichier), ".")) {
case ".pdf": $type = "application/pdf"; break;
case ".gif": $type = "image/gif"; break;
 default:
      print "<FONT COLOR=red><CENTER>";
      print "  Ca va pas non!!!<BR>"; 
      break;
  }
 $nomfichier=basename($fichier);
header("Content-disposition: attachment; filename=$nomfichier");
  header("Content-Type: application/force-download");
  header("Content-Transfer-Encoding: $type\n"); 
  header("Content-Length: ".filesize($fichier));
  header("Pragma: no-cache");
  header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
  header("Expires: 0");
  readfile($fichier);
?>
quand je test le telechargement s'effectue mais quand j'ouvre le fichier télécharger il ne s'ouvre pas pkoi? et comment je dois faire, en réalité on dirait qu'il crée un nouveau doc pdf mais ne fait pas une copie du document a.pdf existant. merci d'avance
Minoucha2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 15h46   #2
Invité régulier
 
Inscription : mars 2006
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 56
Points : 6
Points : 6
problème résolu:
solution :
Code :
<a href=\"telecharger.php?fichier=../doc_cours/a.pdf">
il faut mettre le chemin entier où se trouve le fichier a.pdf

merci
Minoucha2006 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 22h24   #3
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
attention il y a un problème de sécurité si jamais on tape la commande suivante par exemple : "telecharger.php?fichier=../../../home/minoucha/documentsperso/listeMotDePasse.pdf" on pourra récupérer le fichier, tu devrais mieux controler le contenu de la variable $_GET['fichier']
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 22h42   #4
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Code :
1
2
3
4
5
6
7
8
9
	// Dossier où se trouvent les fichiers à télécharger
	$dir = './upload/';
 
	$fichier = basename($_GET['fichier']);
 
	if( ! file_exists($dir.$fichier) )
	{
		die('Fichier introuvable');
	}
Pourrait etre plus sécurisé déja.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2006, 23h02   #5
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par Korko Fain
Code :
1
2
3
4
5
6
7
8
9
    // Dossier où se trouvent les fichiers à télécharger
    $dir = './upload/';
 
    $fichier = basename($_GET['fichier']);
 
    if( ! file_exists($dir.$fichier) )
    {
        die('Fichier introuvable');
    }
Pourrait etre plus sécurisé déja.
ce test ne sécurise pas le téléchargement, j'ai mis des explications là : http://www.developpez.net/forums/sho...86#post1563286
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 09h44   #6
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
L'appel à la fonction basename() permet de ne prendre que le nom du fichier et pas l'arborescence passée en paramètre. Et donc meme si tu rentre ../../../config/config.php

Il ne prendra que config.php.

Ainsi, c'est plus sécurisé.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h59.


 
 
 
 
Partenaires

Hébergement Web