Aller au contenu

download


Sujets conseillés

Posté

Salut, je voudrai proposer le téléchargement de fichier sur mon site et j'ai trouvé un code je plus trop ou, mais ca ne marche pas. Quelqu'un peu m'aider.

voici l'erreur que j'obtient

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 47

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 48

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 49

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 50

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 51

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php:3) in /home/web/users/appartement-immobilier.com/htdocs/immobilier-3D.php on line 53

sinon je pige pas trop l'utilité de la commande header() car avant que je l'utilise je fesai un lien directe sur le fichier en question et ca fonctionne très bien. :wacko:

merci d'avance

Posté

avec mon code ca sera peut etre plus facile

if (file_exists($var_2)) { 
   header("Content-disposition: attachment; filename=$var_2");
   header("Content-Type: application/x-msmetafile ");
   header("Content-Transfer-Encoding: application/zip");
header("Content-Length: ".filesize($var_2));
   header("Pragma: no-cache");
   header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
   header("Expires: 0");
   readfile($var_2);
$popo="<font color=#000000 size=\"2\" face=\"Verdana\" class=ver10><a href='".$var_3."' >Télécharger le fichier 3D</font>";
}
else{
$popo="<font color=#000000 size=\"2\" face=\"Verdana\" class=ver10>Fichier 3D non disponible au téléchargement actuellement</font>";
}
echo popo;

Posté

Avant ta commande header, tu envoies une donnée au navigateur, ce qui fait que le 'header' ne peut plus être envoyé.

Cette donnée, ce peut être un espace, un mot, des balises meta, ou n'importe quoi.

Il ne doit rien y avoir d'envoyé au navigateur entre le début du script et la balise header.

Posté

ok, je vois, en effet je fais un test pour vérifier que le fichier à télécharger est bien présent sur le serveur, sinon je propose de repasser un peu plus tard.

Vu que mes fichiers sont en .zip est ce que je dois vraiment me .... avec les headers ou puis je mettre directement le liens du fichier à télécharger. j'ai déjà fais l'essai ca fonctionne très bien je trouve

Posté

L'avantage du header est que cela te permet de comptabiliser les personnes qui téléchargent le fichier. Ainsi, on peut imaginer qu'avant le header tu mettes un morceau de code pour noter qu'une personne télécharge le fichier, alors que si tu mets directement le fichier, tu ne sais pas si la personne passe seulement sur la page, ou si elle télécharge ce fichier.

Posté

OK pas mal ca. En effet ca peut etre interressant. Comment est ce que l'on fait pour faire ca??????

Sinon pour ce qui est de mon problème avec le test je pense que si je fait le test pour vérifier que le fichier est bien présent et que je renvoi à ce moment la sur un autre script commencant directement par header ca devrai marcher non ? :wacko:

Posté

Non, ne te casses pas la tête comme ca, ca doit marcher.

Avant ta fonction header, tu as une ligne qui renvoie un espace ou un truc comme ca. Tu peux nous poster le script avant la fonction header, jusqu'à celle ci ? On va te trouver ton espace rapidement ;)

Posté

Voilà :lol::wacko:

<html>
<head>
<?php
// fonction viré le Expr1
$argv = $_SERVER['argv'];
?>
         <?php
include("common.php");
$link = mysql_connect ($server, $user, $password);
 if (! $link)
 {
 die ("Couldn't connect to mySQL server");
 }
 if (!mysql_select_db ($db, $link) )
 {
 die ("Coldn't open $db: ".mysql_error() );
 }

// verification de l'identifiant
if(!ereg("^[0-9]+$",$argv[0]))
{
echo "Identifiant incorrect !<br>Identifiant = ".$argv[0];
exit(); // on termine l'executuon du script
}

// requete
$sql = "select Fichier3D from annoncesweb where Expr1='$argv[0]'";

// affichage des produits
if($result = mysql_query($sql))
{

// parcours des résultats
if( $row = mysql_fetch_array($result) )
{
 $var_1 = $row[Fichier3D];
$var_2 = "/home/web/users/alalucarne.com/htdocs/applet/mandats/fichier3d/".$var_1;
$var_3 = "http://www.alalucarne.com/applet/mandats/fichier3d/".$var_1;
}

}

// fermeture de la connection
mysql_close();

if (file_exists($var_2)) {
   header("Content-disposition: attachment; filename=".$var_2);
   header("Content-type: application/force-download");
   header("Content-Transfer-Encoding: application/zip");
header("Content-Length: ".filesize($var_2));
//    header("Pragma: no-cache");
   header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
   header("Expires: 0");
   readfile($var_2);
$popo="<font color=#000000 size=\"2\" face=\"Verdana\" class=ver10><a href='".$var_2."' >Télécharger le fichier 3D</font>";
}
else{
$popo="<font color=#000000 size=\"2\" face=\"Verdana\" class=ver10>Fichier 3D non disponible au téléchargement actuellement</font>";
}
?>
<title>Télécharger le fichier 3D</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="10.css" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
 if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
   document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<script language="JavaScript" type="text/JavaScript">
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this header
// NS4-6,IE4-6
// Fade effect only in IE; degrades gracefully

// =======================================
// Changer les variables suivantes
// =======================================

// Set slideShowSpeed (milliseconds)
var slideShowSpeed = 3000

// Duration of crossfade (seconds)
//var crossFadeDuration = 15

// Specify the image files
var Pic = new Array() // don't touch this
// to add more images, just continue
// the pattern, adding to the array below

Pic[0] = 'Images/archi/01.jpg'
Pic[1] = 'Images/archi/02.jpg'
Pic[2] = 'Images/archi/03.jpg'
Pic[3] = 'Images/archi/04.jpg'
Pic[4] = 'Images/archi/05.jpg'

// =======================================
// Ne rien éditer au-dessous de cette ligne
// =======================================

var t
var j = 0
var p = Pic.length

var preLoad = new Array()
for (i = 0; i < p; i++){
preLoad[i] = new Image()
preLoad[i].src = Pic[i]
}

function runSlideShow(){
if (document.all){
document.images.SlideShow.style.filter="blendTrans(duration=3)"
//document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
document.images.SlideShow.filters.blendTrans.Apply()
}
document.images.SlideShow.src = preLoad[j].src
if (document.all){
document.images.SlideShow.filters.blendTrans.Play()
}
j = j + 1
if (j > (p-1)) j=0
t = setTimeout('runSlideShow()', slideShowSpeed)
}
</script>
<script language="JavaScript" type="text/JavaScript">
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this header
// NS4-6,IE4-6
// Fade effect only in IE; degrades gracefully

// =======================================
// Changer les variables suivantes
// =======================================

// Set slideShowSpeed (milliseconds)
var slideShowSpeed2 = 3000

// Duration of crossfade (seconds)
//var crossFadeDuration = 15

// Specify the image files
var Pic2 = new Array() // don't touch this
// to add more images, just continue
// the pattern, adding to the array below

Pic2[0] = 'Images/archi/archi2.gif'
Pic2[1] = 'Images/archi/syst.gif'
Pic2[2] = 'Images/archi/int.gif'
Pic2[3] = 'Images/archi/maison.gif'

// =======================================
// Ne rien éditer au-dessous de cette ligne
// =======================================

var t2
var j2 = 0
var p2 = Pic2.length

var preLoad2 = new Array()
for (i = 0; i < p2; i++){
preLoad2[i] = new Image()
preLoad2[i].src = Pic2[i]
}

function runSlideShow2(){
if (document.all){
document.images.SlideShow2.style.filter="blendTrans(duration=3)"
//document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)"
document.images.SlideShow2.filters.blendTrans.Apply()
}
document.images.SlideShow2.src = preLoad2[j].src
if (document.all){
document.images.SlideShow2.filters.blendTrans.Play()
}
j2 = j2 + 1
if (j2 > (p2-1)) j2=0
t2 = setTimeout('runSlideShow2()', slideShowSpeed2)
}
</script>
</head>

<body bgcolor="#FFFFFF" text="#000000" link="#000000" vlink="#000000" alink="#000000" onload="runSlideShow(), runSlideShow2()">
<table width="659" height="582" border="0" align="center" cellspacing="0">
 <!--DWLayoutTable-->
 <tr>
   <td colspan="2" rowspan="2" valign="top"><b class="unnamed1">A la lucarne de l'immobilier on vous propose<br>
   de télécharger le fichier 3D du bien qui vous intéresse,<br>
   afin que vous puissiez faire les modifications que vous souhaitez,<br>
   grace à la gamme de logicel Architecture</b><span class="unnamed1">.</span></td>
   <td width="153" height="33"> </td>
   <td width="1"></td>
 </tr>
 <tr>
   <td rowspan="3" valign="top"><div align="center"><img src="Images/archi/01.jpg" name='SlideShow' width=110 height=78></div></td>
   <td height="51"></td>
 </tr>
 <tr>
   <td width="311" rowspan="3" valign="top"><div align="center"><img src="Images/archi/archi2.gif" name='SlideShow2' width=223 height=265></div></td>
   <td width="186" height="36"> </td>
   <td></td>
 </tr>
 <tr>
   <td rowspan="2" valign="top">
     <p align="center"><font size="4"><b><font face="Verdana, Arial, Helvetica, sans-serif" class="unnamed2">Clic
       & Go</font></b></font></p>        <p class="unnamed1" align="center"><a href="http://www.architecture-construction.com/archiv3/logiciels.php" target="_blank">Achat en ligne des logiciels</a> </p>        <table width="104%" height="81">
       <tr>
         <td>
         <div align="center">
<?php
echo $popo;
     ?></div></td>
       </tr>
                                     </table></td>
   <td height="13"></td>
 </tr>
 <tr>
   <td height="218"> </td>
   <td></td>
 </tr>
 <tr>
   <td height="21" valign="top"><!--DWLayoutEmptyCell--> </td>
   <td valign="top"><!--DWLayoutEmptyCell--> </td>
   <td> </td>
   <td></td>
 </tr>
 <tr>
   <td height="39" colspan="3" valign="top"><DIV><FONT face=Arial size=2>Vous pouvez dès maintenant grâce à notre fichier 3D que nous avons modélisé pour vous, téléchargeable gratuitement, vous projeter dans votre futur intérieur aménagé et décoré.</FONT></DIV>
     <DIV></DIV>
   </td>
   <td></td>
 </tr>
 <tr>
   <td height="29" colspan="3" valign="middle"><FONT face=Arial size=2>Il vous suffit de vous procurer un des logiciels de la gamme <a href="http://www.architecture-construction.com/archiv3/logiciels.php" target="_blank">Architecture et construction</a> de Clic and go.</FONT></td>
   <td></td>
 </tr>
 <tr>
   <td height="28" colspan="3" valign="middle"><DIV></DIV>
   <DIV><FONT face=Arial size=2>Voici un petit échantillon de vos possibilité.</FONT></DIV></td>
   <td></td>
 </tr>
 <tr>
   <td height="21" colspan="3" valign="top"><!--DWLayoutEmptyCell--> </td>
   <td></td>
 </tr>
 <tr valign="middle">
   <td height="93" colspan="4"><table width="100%" border="2" align="center" cellpadding="0" cellspacing="0" bordercolor="#336633">
     <!--DWLayoutTable-->
     <tr valign="middle">
       <td height="75"><div align="center"><a href="#" onClick="window.open('Images/architecture/01.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/01.jpg" border="0"></a></div></td>
       <td><div align="center"><a href="#" onClick="window.open('Images/architecture/02.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/02.jpg" border="0"></a></div></td>
       <td><div align="center"><a href="#" onClick="window.open('Images/architecture/03.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/03.jpg" border="0"></a></div></td>
       <td height="75"><div align="center"><a href="#" onClick="window.open('Images/architecture/04.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/04.jpg" border="0"></a></div></td>
       <td height="75"><div align="center"><a href="#" onClick="window.open('Images/architecture/05.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/05.jpg" border="0"></a></div></td>
       <td><div align="center"><a href="#" onClick="window.open('Images/architecture/06.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/06.jpg" border="0"></a></div></td>
     </tr>
     <tr valign="middle">
       <td height="71"><div align="center"><a href="#" onClick="window.open('Images/architecture/07.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/07.jpg" border="0"></a></div></td>
       <td><div align="center"><a href="#" onClick="window.open('Images/architecture/08.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/08.jpg" border="0"></a></div></td>
       <td><div align="center"><a href="#" onClick="window.open('Images/architecture/09.jpg','','width=600,height=450, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no');" style="text-decoration:none"><img src="Images/architecture2/09.jpg" border="0"></a></div></td>
       <td height="71" colspan="3"> </td>
       </tr>
   </table></td>
 </tr>
</table>
<p> </p>
</body>
</html>

Bon courage :P

Posté

Il te faut enlever ceci :

<html>
<head>
<?php
// fonction viré le Expr1
$argv = $_SERVER['argv'];
?>
        <?php
include("common.php");

et le remplacer par ceci :

<?php
// fonction viré le Expr1
$argv = $_SERVER['argv'];

include("common.php");

Et tu n'auras (apparemment) plus rien de transmis au navigateur avant ta fonction header ;)

Posté

nickel ca marche bien, et pour ce qui est de savoir le nombre de téléchargement ca ce passe comment ?

Posté

Tu te mets devant le serveur avec un crayon, et quand la loupiote verte s'allume, tu fais un tiret :lol:

Sérieux :

Tu créées une table 'nb_tel', dans laquelle tu mets les champs :

id_nb_tel (auto increment,etc) et fichier (varchar 255 par exemple)

et juste avant ton header, tu mets :

$q = "insert into nb_tel (id_nb_tel,fichier) values ('',$var_1);";

$r = mysql_query($q);

Posté

Salut,

1) Avec la méthode indiquée, tu vas avoir une ligne insérée par téléchargement. C'est dommage.

2) Si la colonne de comptage est un nombre auto_increment, il n'y a aucun intérêt à lui spécifier une valeur (d'autant plus sciemment fausse) en utilisant

$q = "insert into nb_tel (id_nb_tel,fichier) values ('',$var_1);";

Je te conseillerai donc :

0) de créer une table dont chaque ligne contienne un id, un nom de fichier unique et une colonne compteur avec valeur par défaut à 0

1) de créer par avance une ligne de la table par fichier (ex. avec un script à toi qui fouille le répertoire de téléchargement, et ajoute la ligne si elle n'existe pas déjà grâce à un

$q = "insert into nb_tel (fichier) values ($var_1);";

2) de mettre à jour cette table juste avant ton header grâce à qqch du style

$q = "update nb_tel set compteur = compteur + 1 where fichier = '$var_1';";

Posté (modifié)

Merci à vous 2. Ca marche nickel tout ca. mais juste une petit question je suis sur un serveur dédié et c'est un "Intel® Pentium® 4 CPU 2.80GHz" tout mon site est basé sur du php/mysql combien de requete peu gérer un tel serveur à votre avis. n'est ce pas surcharger le serveur pour pas grand chose que de rajouter une requete à chaque download??

Car j'ai installé un script "Robotstats" qui permet de suivre le passage des moteur de recherche sur mon site et aussi n'importe qu'elle visiteur et je me suis rapidement apercu que ca fesai ralentir l'affichage de mes pages. Ben oui plus de 3000 visteurs par jour donc plus de 3000 requetes juste pour me dire ca et le serveur fait la geule

Vous en pensez quoi :wacko:

Modifié par genmin
Posté
Car j'ai installé un script "Robotstats" qui permet de suivre le passage des moteur de recherche sur mon site et aussi n'importe qu'elle visiteur et je me suis rapidement apercu que ca fesai ralentir l'affichage de mes pages. Ben oui plus de 3000 visteurs par jour donc plus de 3000 requetes juste pour me dire ca et le serveur fait la geule

Vous en pensez quoi  :wacko:

Salut Genmin,

Un script tel que RobotStats est très lourd si tu actives tous les moteurs... parce qu'à chaque page il faudra qu'il interroge la base et vérifie soit l'IP soit le User_Agent de l'appellant, et ceci pour chaque moteur présent.

Il est clair que cela ralentit sensiblement l'affichage si le nombr de moteurs est important.

Deux choses peuvent accélérer l'affichage:

- réduire le nombre de moteurs surveillés

- mettre le code en fin de page, après la balise </html>.

Cette dernière solution aura aussi le mérite de ne pas afficher les erreurs sur la page s'il y en a ;)

Dans l'exemple que tu donnes, cela ne fait qu'une seule requête par téléchargement, donc pas grand-chose ;)

Dan

Posté

ok, merci pour l'info. J'ai jetter un oeil sur spyword il me parais pas mal. Dan tu a l'air de connaitre robotstats qu'est ce que tu en pense et devrai je préférer spyword à robotstats. Je dois dir que je suis débutant et j'essai d'améliorer mon référencement alors j'ai bien besoin de statistique pour savoir ou m'orienter.

Malheureusement pour le moment je suis un peu perdu avec tout c'est outils :wacko:

Autre chose qui na rien à voir avec le sujet mais j'ai GoogleBot qui passe me faire un coucou tout les jours à 5h30 du mat environ depuis plus d'une semaine (enfin avant je n'avais robotstats alors je sais po) mais il ne passe que sur ma page d'accueil. Alors que d'autre moteur parcour tout mon site pourquoi google boude t'il le reste de mes pages???

Posté

Le problème de ces stats de robot, c'est qu'il faut les mettre à jour régulièrement...

Donc, si google passe tous les jours à 5h30 seulement, c'est peut etre parce que tu n'as rien pour le détecter lorsqu'il passe avec une autre ip, à un autre moment.

Lorsque l'on interroge google sur ton site, ca donne :

http://www.google.com/search?num=100&hl=fr...lucarne.com&lr=

et 760 pages, ce qui est déjà pas mal.

Par contre, il y a énormément de javascript dans ta page. Tu devrais le mettre dans une page séparée, histoire de différencier le code html du code javascript.

Tu as la possibilité de voir ce que 'voit' un robot sur ce 'lynx viewer' : http://www.delorie.com/web/lynxview.cgi?ur...resentation.htm

(pour la page présentation..)

Ca peut t'aiguiller aussi dans le choix texte/images/animations java.

Anonymus.

Posté

merci pour l'info, en effet j'ai que 2 adresses IP pour détecter Googlebot: 216.239.46.xx et 66.249.64.xx

Pour ce qui est du javascript je savai que google ne le comprenait pas mais je ne pensai pas que ca le gène pour le reste de la page.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...