Header et base de donnée : d'ou vient le problème ?

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

Sylboss
Nouveau WRInaute
 
Messages: 3
Inscription: Sam Sep 25, 2004 11:18

Header et base de donnée : d'ou vient le problème ?

Message le Sam Sep 25, 2004 12:00

Bonjours !

Le titre n'est peut-être pas très clair, mais je vais essayer de bien vous expliquer mon problème dans ce message :

J'ai un site qui propse des téléchargements, dont des vidéos et des PPS... or, quand quelqu'un veut télécharger un PPS ou une vidéo, il doit faire clique droit, puis enregistrer sous, ce qui est un peu chiant ! (A ce qu'il parait, certaines personne n'ont pas besoin de faire clique droit puis enregistrer sous... mais pour la majoité des personnes que je connai, il faut le faire...).

Donc, je veux que mon fichier se télécharge avec un lien hypertexte, directement du clique droit, à l'aide de la fonction header :

Le lien serait :

Code: Tout sélectionner
<a href="pps_download.php" class="texte">Chatmoura&iuml; !</a>


Ce qui donnerai un lien avec écrit "Chatmouraï !" qui enverrai sur la page pps_download.php.

La page pps_download.php serait :

Code: Tout sélectionner
<?php
// Le chemin du fichier
$fichier = 'pps/chatmourai.pps';
// L'en-tête avec le type erroné
header('Content-type: application/blabla');
// Un en-tête pour dire qu'on souhaite que le fichier soit téléchargé et dont on propose un nom
header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');
// On envoie réellement le fichier
readfile($fichier);
?> 


Voilà, jusqu'ici, pas de problème...

Le problème, c'est que mon site contient pour l'instant 46 PPS et 36 vidéos, ce qui ferait un total de 82 pages à faire ! ... et donc là, il y a un problème.

J'ai alors demandé à quelqu'un si je pouvai faire quelque chose pour ne pas avoir tant de page à faire (surtout qu'a chaque fois que j'ajouterai un PPS ou une vidéo, il faudrai que je fasse une autre page !)

On m'a alors dit de paramétrer la page, et on m'a donné ce code :

Code: Tout sélectionner
<?php
// Connexion DB
// Requête : mysql_query(sprintf('SELECT fichier FROM table WHERE id=%d', $_GET['id']));
// Récupération dans $fichier du résultat de la requête.

// L'en-tête avec le type erroné
header('Content-type: application/octetstream');
// Un en-tête pour dire qu'on souhaite que le fichier soit téléchargé et dont on propose un nom
header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');
// On envoie réellement le fichier
readfile($fichier);
?> 


Et on m'a dit qu'il faudrai faire le lien suivant :

Code: Tout sélectionner
<a href="download.php?id=4654645">Lien vers Fichiers</a>


Et c'est là que sa bloque :

Admettons que pour le lien, je mette :
Code: Tout sélectionner
<a href="pps_download.php?id=1">Chamourai !</a>


J'ai paramétrer la page pps_download :
Code: Tout sélectionner
<?php
// Connexion DB
// Requête : mysql_query(sprintf('SELECT champ,champ FROM table WHERE id=%d', $_GET['id']));
// Récupération dans $fichier du résultat de la requête.

$server = 'sql.free.fr';
$user = 'sylboss';
$password = 'password';
$database = 'sylboss';

mysql_connect($server,$user,$password) or die('Erreur de connexion'); 
mysql_select_db($database) or die('Base inexistante'); 
$fichier = mysql_query(sprintf('SELECT nom FROM pps WHERE id=%d', $_GET['id']));
mysql_close(); 

// L'en-tête avec le type erroné
header('Content-type: application/octetstream');
// Un en-tête pour dire qu'on souhaite que le fichier soit téléchargé et dont on propose un nom
header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');
// On envoie réellement le fichier
readfile($fichier);
?>


(Bien sur, mon mot de passe n'est pas password, mais je n'allais pas vous le dire !).

Et là, ça ne marche pas ! ... donc, ben je ne sais pas quoi faire, je ne sais pas d'où vient le problème, j'ai beau lire des doc et tuto, rien à faire, je sais pas d'ou vient le problème !

D'ou vient il ? Du script qui n'est pas bon (alors que dois-je changer !!!)
De ma base de donnée ? (si le script vous parait bon, c'est que le problème vient de là !
D'autre part ou des deux, mais là, je suis vraiment nul !

Je comprendrez mieux avec un exemple, clair et compréhensible (quand il y a pas de code, je galère énormement pour comprendre !).

... il faut dire aussi que je suis débutant, ça fait 2 mois que je me suis mis au php, et encore, c'était juste pour faire un include ! donc, j'aurai besoin d'aide mais de préférence pas trop compliqué pour un débutant !

J'espère que j'ai été assez clair dans ce message !
J'attend vos réponses avec impatience !

Merci d'avance !

Sylboss

PS : Quand je dis débutant, c'est aussi que j'ai un site depuis 1 ans, et que j'ai moi même 14 ans... donc, ne vous étonnez pas si je ne vous comprend pas très bien ![/code]

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Re: Header et base de donnée : d'ou vient le problème ?

Message le Sam Sep 25, 2004 12:30

Code: Tout sélectionner
<?php
// Connexion DB
// Requête : mysql_query(sprintf('SELECT champ,champ FROM table WHERE id=%d', $_GET['id']));
// Récupération dans $fichier du résultat de la requête.

$server = 'sql.free.fr';
$user = 'sylboss';
$password = 'password';
$database = 'sylboss';

mysql_connect($server,$user,$password) or die('Erreur de connexion'); 
mysql_select_db($database) or die('Base inexistante');


$result = mysql_query(sprintf('SELECT nom FROM pps WHERE id=%d', $_GET['id']));
$fields = mysql_fetch_array( $result );
$fichier = $fields['nom'];
mysql_close();

Code: Tout sélectionner
// L'en-tête avec le type erroné
header('Content-type: application/octetstream');
// Un en-tête pour dire qu'on souhaite que le fichier soit téléchargé et dont on propose un nom
header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');
// On envoie réellement le fichier
readfile($fichier);
?>


header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$fichier);
header('Content-Length: ' . filesize($fichier));
readfile($fichier);

Attention car si tes fichiers sont trop volumineux, ça ne passera pas ( timeout du script PHP )

PS: Si pour certains, les fichiers s'ouvrent directement, c'est qu'ils l'ont configuré quelque part.

Bernard
WRInaute impliqué
WRInaute impliqué
 
Messages: 255
Inscription: Sam Sep 13, 2003 9:35

Message le Sam Sep 25, 2004 12:32

pour les tailles trop importantes , il faut je crois modifier MAX FILE SIZE dans php.ini
Dernière édition par Bernard le Sam Sep 25, 2004 14:12, édité 2 fois.

Sylboss
Nouveau WRInaute
 
Messages: 3
Inscription: Sam Sep 25, 2004 11:18

Merxi !

Message le Sam Sep 25, 2004 12:44

Merci beaucoup !

... je vais tout de suite essayer !

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Sam Sep 25, 2004 12:56

Bernard a écrit:pour les tailles trop importantes , il faut je crois mofifie rMAX FILE SSIZE da


Ca c'est pour l'upload. Le problème peut venir du temps d'exécution du script qui est limité ( et même très limité chez free )

Sylboss
Nouveau WRInaute
 
Messages: 3
Inscription: Sam Sep 25, 2004 11:18

Message le Sam Sep 25, 2004 14:47

Merci beacoup, j'étais coincé pendant 2 jours et grâce à vous je suis plus coincé !

Voilà, et si ça peu aidé quelqu'un, pour que le script marche, il faut remplacer le :
header("Content-Disposition: attachment; filename=".$fichier);
par un
header('Content-Disposition: attachment; filename="' . basename($fichier) . '"');

Voilà, et encore merci à vous !

Sylboss


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

Consultez la description détaillée des produits ou services de Google suivants : Google Base

  • Analyse de l'entête HTTP
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
  • Suggestion de mots Google
    Cet outil vous permet d'obtenir une liste de 10 mots ou expressions suggérés par Google sur la base d'un mot que vous fournissez.
  • Calcul du taux de backlinks vers pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités