Petit soucis pour téléchargement d'un fchier

Petit soucis pour téléchargement d'un fchier - PHP - Programmation

Marsh Posté le 04-04-2006 à 22:35:31    

Salut,
 

Code :
  1. function ForceFileDownload($file){
  2.     $filesize = @filesize($file);
  3.     header("Content-Disposition: attachment; filename=".$file);
  4.     header("Content-Type: application/octet-stream" );
  5.     header("Content-Type: application/force-download" );
  6.     header("Content-Type: application/download" );
  7.     header("Content-Transfer-Encoding: binary" );
  8.     header("Pragma:no-cache" );
  9.     header("Expires:0" );
  10.     @set_time_limit(600);
  11.     readfile('../videos/'.$file);
  12. }


 
Bon moi je me suis mis ça sur mon site, car j'ai ajouté un compteur lors d'un dl d'une vidéos sur mon site.
et il falais donc que j'ouvre la vidéo coresspondante au lien.
 
Mais aprés, le temps que la vidéo se dl, j'ai plus accés à aucune page de mon site, si je clique sur un lien de la barre de menu, ça me demande, voulez vous ouvrir, index.php avec ceci...news.php avec ceci..
 
si quelqu'un sait d'ou viend ce comportement :D.
 
De plus sous IE, le téléchagement s'arrête jamais.... [:atog] (en local oui, pas sur Free)
 
Merci

Reply

Marsh Posté le 04-04-2006 à 22:35:31   

Reply

Marsh Posté le 04-04-2006 à 22:39:26    

header("Content-Type: application/octet-stream" );
header("Content-Type: application/force-download" );
header("Content-Type: application/download" );
 
faudrait te décider !?

Reply

Marsh Posté le 04-04-2006 à 22:47:16    

là j'ai épuré:
 

Code :
  1. function ForceFileDownload($file){
  2.     $filesize = @filesize($file);
  3.     header("Content-Disposition: attachment; filename=".$file);
  4.     //header("Content-Type: application/octet-stream" );
  5.     header("Content-Type: application/force-download" );
  6.     //header("Content-Type: application/download" );
  7.     header("Content-Transfer-Encoding: binary" );
  8.     header("Pragma:no-cache" );
  9.     header("Expires:0" );
  10.     //@set_time_limit(600);
  11.     readfile('../videos/'.$file);
  12. }


 
ça change rien lol....

Reply

Marsh Posté le 04-04-2006 à 22:50:52    

> De plus sous IE, le téléchagement s'arrête jamais.... [:atog] (en local oui, pas sur Free)
- tu dépasse peut être la taille maximale autorisé par Free (?)
 
> si je clique sur un lien de la barre de menu, ça me demande, voulez vous ouvrir, index.php avec ceci...news.php avec ceci..  
- est tu sûr d appeler la fonction ForceDownload au bon moment? (genre bugs avec les sessions..)

Reply

Marsh Posté le 04-04-2006 à 22:53:23    

je suis en train d essayer avec FF, il me dit taille fichier inconnue, ajoute content-length...

Reply

Marsh Posté le 04-04-2006 à 23:03:24    

Ah j'avais pas vu que tu t'occuper de moi, merci ;)
 
Bon de mon côté mes pistes m'ont amenées aussi à content-length...
 
là c'est en cours de test...
 
Pour l'autre probléme, j'ai entendu que certain site bloqué à ce niveau là parfois les entrés/ip...
 
Mais bon ça me parait bizare.
 
...ah sinon nickel le téléchargement s'arrête...Un probléme de fixé :sweat:

Reply

Marsh Posté le 04-04-2006 à 23:21:37    

ça marche nickel avec FF

Reply

Marsh Posté le 04-04-2006 à 23:23:43    

comment ça...t'arrive à changer de page ?
 
Sinon le reste oui marche nickel sous FF et IE :D

Reply

Marsh Posté le 04-04-2006 à 23:26:02    

sauf que:
- ça buggue quand je télécharge une vidéo (mystère, c est pas free puisque je peut downloader les news avec wget, peut être que j ai trop de téléchargements en cours: pas idéal pour tester)
 
- pas de reprise de téléchargement (pas idéal pour de la vidéo...)
 
tu peut pas faire le compteur avec une redirection plutot? à mon avis ça serait plus pratique et ça buggerai moins...

Reply

Marsh Posté le 04-04-2006 à 23:28:57    

Ben comment ça.. là quand je clic sur le lien, ça me recharge la page avec en param l'id de la vidéo, puis j'incrémente la BD et je lance la dl...


Message édité par xtof_83 le 04-04-2006 à 23:29:19
Reply

Marsh Posté le 04-04-2006 à 23:28:57   

Reply

Marsh Posté le 04-04-2006 à 23:43:57    

oui mais tu n a pas de reprise de téléchargement (c est à dire que si ça plante tu ne peut pas reprendre au même endroit)
 
à la place tu peut faire un popup qui affiche une page d attente, qui compte, et qui redirige (instantanément) vers la vidéo. + un lien pour les navigateurs qui ne supportent pas les redirections. + si le navigateur le supporte, il affichera la vidéo dans le popup. + si le navigateur le supporte proposera de sauvegarder le fichier.
enfin, un truc du genre quoi...

Reply

Marsh Posté le 04-04-2006 à 23:59:29    

lol oki doki...tout compris ;)
 
C'est pour ça que par défaut quand on dl un truc, ça ouvre une page vide :D
 
Bon merci pour tout mec...je vais me charger du reste.

Reply

Marsh Posté le 05-04-2006 à 00:06:19    

attention, ta méthode peut être valable, mais il faudrait que tu gère la reprise, et je n ai aucune idée comment s y prendre (jamais essayé en PHP), probablement avec les headers qu il faut et une vérif des infos (lesquelles?)

Reply

Marsh Posté le 05-04-2006 à 00:09:13    

Ouais bon sinon, ça marche toujours pas avec une page ouverte ou pas, j'ai plus accés au site :D
 
ça m'étonne que ça vienne du code, mais bon...

Reply

Marsh Posté le 05-04-2006 à 00:17:09    

ben je peut pas te dire, mais quand je téléchargeai la vidéo:
- je ne pouvai pas avoir accès au autres pages avec FF (timeout !silencieux!)
- je pouvais downloader en même temps avec un logiciel de téléchargement (wget) la page de news
 
donc: ça ne vient pas d une restriction de Free
 
les headers de la page news.php semblent corrects:


 1 HTTP/1.1 200 OK
 2 Date: Tue, 04 Apr 2006 21:03:57 GMT
 3 Server: Apache/ProXad [Mar 28 2006 05:12:42]
 4 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
 5 Expires: Thu, 19 Nov 1981 08:52:00 GMT
 6 Pragma: no-cache
 7 X-Powered-By: PHP/4.3.10
 8 Set-Cookie: PHPSESSID=84178ae65bf86fb624d3932c9f747437; path=/
 9 Connection: close
10 Content-Type: text/html


 
je re-teste en mettant en pause mes autres téléchargements.

Reply

Marsh Posté le 05-04-2006 à 00:22:58    

ha non, tu as déjà changé pour le popup, fait le plus petit:

Code :
  1. <a href="redirect.php?video.avi" target=_blank onclick="javascript:window.open('redirect.php?video.avi','_blank','width=200,height=100');return false;">


 
(fonctionne avec/sans javascript)

Reply

Marsh Posté le 05-04-2006 à 00:32:44    

lol ça m'embête un peu de mettre du Javascript pour ça :D

Reply

Marsh Posté le 05-04-2006 à 00:34:31    

bah, c est kedal, un popup ça se fait toujours avec un bout de JS, en plus ça marche aussi sans javascript.
le <<return false>> assure que le <<href>> ne sera pas executé si il y a javascript, sinon ça execute le <<href>> et le <<target>>.

Reply

Marsh Posté le 05-04-2006 à 00:37:41    

heu, je te ferai remarquer que <<Content-Description: File Transfer>> oblige à télécharger plutot que visionner.

Reply

Marsh Posté le 05-04-2006 à 00:39:53    

ouais mais moi je veux pas qu'on visionne ;)
Mais je veux qu'on puisse encore se ballader.
 
Bon Merci pour leclairsiement JS, :D

Reply

Marsh Posté le 05-04-2006 à 00:43:50    

Bon pour la popup c'est bon j'ai modifié, aprés quand j'ai le temps, j'y placerait tout les options...

Reply

Marsh Posté le 05-04-2006 à 00:46:41    

ouais les options ça a lair d aller
tu rajoutera un pti gif de téléchargement sur la page d attente
par contre ça télécharge pas chez moi

Reply

Marsh Posté le 05-04-2006 à 00:53:35    

ça y est ça marche, après un reload de la page principale ``vidéos``

Reply

Marsh Posté le 05-04-2006 à 00:56:26    

je te mets de la doc sur les options des popups:
 

  • status   The status bar at the bottom of the window.
  • toolbar  The standard browser toolbar, with buttons such as Back and Forward.
  • location  The Location entry field where you enter the URL.
  • menubar  The menu bar of the window directories, the standard browser directory buttons, such as What's New and What's Cool
  • resizable  Allow/Disallow the user to resize the window.
  • scrollbars  Enable the scrollbars if the document is bigger than the window
  • height  Specifies the height of the window in pixels. (example: height='350')
  • width  Specifies the width of the window in pixels.


Message édité par nargy le 05-04-2006 à 00:56:57
Reply

Marsh Posté le 05-04-2006 à 00:59:33    

:lol: Tu sais je suis loin d'être noobs en HTML/CSS/JS :D
 
Le Js c'est juste que quand je peux ne pas l'utiliser, je l'utilise pas :D
 
Mais merci quand même pour tout le mal que tu te donnes.
Moi commence légérement à me taper sur les nerfs...Et rien sur google

Reply

Marsh Posté le 05-04-2006 à 01:03:24    

> Tu sais je suis loin d'être noobs en HTML/CSS/JS :D
oui, j ai remarqué, cétait juste pour te faciliter le travail
(je regarde la télé pendant que je surfe)
 
> Et rien sur google
quest ce que tu cherche?

Reply

Marsh Posté le 05-04-2006 à 01:06:53    

width=352,height=288
et vire Content-Description: File Transfer

Reply

Marsh Posté le 05-04-2006 à 01:09:44    

navigation impossible lors d'un telechargement
 
telechargement bloque acces site
 
Je suis pas trés en forme de motclé ce soir, et pas motivé de lire de l'anglais...
 
Tiens vais tenter quand même.

Reply

Marsh Posté le 05-04-2006 à 01:14:28    

nargy a écrit :

width=352,height=288
et vire Content-Description: File Transfer


 
 
Rien de changé  :sweat:

Reply

Marsh Posté le 05-04-2006 à 01:15:10    

Reply

Marsh Posté le 05-04-2006 à 01:16:52    

Code :
  1. function ForceFileDownload($file){
  2.    //First, see if the file exists
  3.    if (!is_file('../videos/'.$file)) { die("<b>404 File not found!</b>" ); }
  4.    //Gather relevent info about file
  5.    $len = filesize('../videos/'.$file);
  6.    $filename = basename('../videos/'.$file);
  7.    $file_extension = strtolower(substr(strrchr($filename,"." ),1));
  8.    //This will set the Content-Type to the appropriate setting for the file
  9.    switch( $file_extension ) {
  10.          case "pdf": $ctype="application/pdf"; break;
  11.      case "exe": $ctype="application/octet-stream"; break;
  12.      case "zip": $ctype="application/zip"; break;
  13.      case "doc": $ctype="application/msword"; break;
  14.      case "xls": $ctype="application/vnd.ms-excel"; break;
  15.      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  16.      case "gif": $ctype="image/gif"; break;
  17.      case "png": $ctype="image/png"; break;
  18.      case "jpeg":
  19.      case "jpg": $ctype="image/jpg"; break;
  20.      case "mp3": $ctype="audio/mpeg"; break;
  21.      case "wav": $ctype="audio/x-wav"; break;
  22.      case "mpeg":
  23.      case "mpg":
  24.      case "mpe": $ctype="video/mpeg"; break;
  25.      case "mov": $ctype="video/quicktime"; break;
  26.      case "avi": $ctype="video/x-msvideo"; break;
  27.      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
  28.      case "php":
  29.      case "htm":
  30.      case "html":
  31.      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>" ); break;
  32.      default: $ctype="application/force-download";
  33.    }
  34.    //Begin writing headers
  35.    header("Pragma: public" );
  36.    header("Expires: 0" );
  37.    header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  38.    header("Cache-Control: public" );
  39.    //header("Content-Description: File Transfer" );
  40.  
  41.    //Use the switch-generated Content-Type
  42.    header("Content-Type: $ctype" );
  43.    //Force the download
  44.    $header="Content-Disposition: attachment; filename=".$filename.";";
  45.    header($header);
  46.    header("Content-Transfer-Encoding: binary" );
  47.    header("Content-Length: ".$len);
  48.    @readfile('../videos/'.$file);
  49.    exit;
  50. }


 
Bon mon truc c'est ça maintenant :D...
Un peu amélioré, mais rien de plus ce que tu mas dis de virer...

Reply

Marsh Posté le 05-04-2006 à 01:19:36    

> Rien de changé  :sweat:  
si, la taille du popup [:rofl]
> Content-Disposition: attachment;
n est pas censé forcer le download, juste fournir un nom de fichier au cas où
 [:dur]  
 
à toi de voir...

Reply

Marsh Posté le 05-04-2006 à 01:20:50    


 
Tu as abusé de copier - coller  :lol:  
 
Bon mais toi, tu me parles de quoi là... :whistle: ...car je crois qu'on est en quipropos sévére... :D
 
La fatigue des 2 camps... [:aia]

Reply

Marsh Posté le 05-04-2006 à 01:23:39    

nargy a écrit :

> Rien de changé  :sweat:  
si, la taille du popup [:rofl]
> Content-Disposition: attachment;
n est pas censé forcer le download, juste fournir un nom de fichier au cas où
 [:dur]  
 
à toi de voir...


 
 
Ouias la popup comme ça c'est vachement plus classe [:saul williams]

Reply

Marsh Posté le 05-04-2006 à 01:24:57    

ha ouais, non
 
tu te prends grave la tête
 
moi ce que je disait c était de laisser apache faire
 
dans le popup, tu met juste:
 

Code :
  1. header(location: $file); // hop, redirect
  2. compterEnPlus($file); // hop, modif BDD
  3. afficheMessageAttente($file); // hop, petite anim gif


 
Après le serveur web s occupe automatiquement des headers, de la reprise, et le navigateur s occupe d afficher dans le popup, ou de proposer le téléchargement/lecture dans une appli.

Reply

Marsh Posté le 05-04-2006 à 01:26:28    

enfin, avant de tout virer... :D ...garde une copie au cas où ;)

Reply

Marsh Posté le 05-04-2006 à 01:34:08    

ça fait un moment que ta pas posté.. soit tu bosse dur, soit tu te tape la tête contre le clavier.. :lol:

Reply

Marsh Posté le 05-04-2006 à 01:36:39    

Ben je me tape la tête sur AJAX pour IE :D
 
Et pour cette connerie...sans solution...
 
Bon fnalement tu me propose de déménager tout mon merdier, un peu plus loin , mais sans que çà change le bordel :lol:

Reply

Marsh Posté le 05-04-2006 à 01:51:48    

ajax? pour quoi faire, je connais pas ajax. ça a le nom d un truc qui décape mon navigateur, et il n a pas besoin d être décapé mon navigateur :)
 
> Bon fnalement tu me propose de déménager tout mon merdier, un peu plus loin , mais sans que çà change le bordel
 
déménager... je dirai plutot te dépétrer... la liste des types mimes ça me parait un peu risqué, surtout que le serveur web gère déjà tout ça.
 
ceci dit c est interessant.... mais tu va mettre du temps à reproduire ce que fait déjà apache, et je ne suis pas sûr qu il y ai un gain quelquonque ..?

Reply

Marsh Posté le 05-04-2006 à 01:57:14    

lol...
 
Mouais oki, donc je vais virer tout le blabla ;)
et on verra bien, mais je ferais ça demain, car j'ai les yeux qui piquotent.
 
AJAX :D
Ben c'est JS qui discute avec PHP, c'est beau l'amour...lol.
Et ça me sert dans ma partie Spots, pour remplacer le JS/HTML pourri qui me permet pas de valider ma page.
 
(pour les listes, la seconde interférant avec la premiére)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed