genmin Posté 6 Décembre 2004 Posté 6 Décembre 2004 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 47Warning: 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 48Warning: 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 49Warning: 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 50Warning: 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 51Warning: 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 52Warning: 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. merci d'avance
genmin Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 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;
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 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.
genmin Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 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
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 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.
genmin Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 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 ?
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 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
genmin Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 Voilà <html><head><?php// fonction viré le Expr1$argv = $_SERVER['argv'];?> <?phpinclude("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'identifiantif(!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 produitsif($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 connectionmysql_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 filesvar Pic = new Array() // don't touch this// to add more images, just continue// the pattern, adding to the array belowPic[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 tvar j = 0var p = Pic.lengthvar 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].srcif (document.all){document.images.SlideShow.filters.blendTrans.Play()}j = j + 1if (j > (p-1)) j=0t = 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 filesvar Pic2 = new Array() // don't touch this// to add more images, just continue// the pattern, adding to the array belowPic2[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 t2var j2 = 0var p2 = Pic2.lengthvar 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].srcif (document.all){document.images.SlideShow2.filters.blendTrans.Play()}j2 = j2 + 1if (j2 > (p2-1)) j2=0t2 = 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
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 Il te faut enlever ceci : <html><head><?php// fonction viré le Expr1$argv = $_SERVER['argv'];?> <?phpinclude("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
genmin Posté 6 Décembre 2004 Auteur Posté 6 Décembre 2004 nickel ca marche bien, et pour ce qui est de savoir le nombre de téléchargement ca ce passe comment ?
Anonymus Posté 6 Décembre 2004 Posté 6 Décembre 2004 Tu te mets devant le serveur avec un crayon, et quand la loupiote verte s'allume, tu fais un tiret 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);
MarvinLeRouge Posté 6 Décembre 2004 Posté 6 Décembre 2004 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';";
genmin Posté 7 Décembre 2004 Auteur Posté 7 Décembre 2004 (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 Modifié 7 Décembre 2004 par genmin
Anonymus Posté 7 Décembre 2004 Posté 7 Décembre 2004 Bonjour, Ppour l'analyse des moteurs, tu peux utiliser : http://www.spywords.com/ et pour tes pages en général, tu peux utiliser bbclone : http://www.framasoft.net/article1892.html Quant à savoir si une requète peut engendrer une surcharge, ne t'inquiète pas, il en faut beaucoup plus
Dan Posté 7 Décembre 2004 Posté 7 Décembre 2004 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 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
genmin Posté 7 Décembre 2004 Auteur Posté 7 Décembre 2004 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 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???
Anonymus Posté 7 Décembre 2004 Posté 7 Décembre 2004 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.
genmin Posté 7 Décembre 2004 Auteur Posté 7 Décembre 2004 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.
Anonymus Posté 7 Décembre 2004 Posté 7 Décembre 2004 Non, ca ne le gene pas, mais ca fait une page plus claire
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant