Transfert de fichier qui bloque

Transfert de fichier qui bloque - PHP - Programmation

Marsh Posté le 19-10-2006 à 13:38:32    

Bonjour a tous,
 
Je suis en train de créer un script antileech. Bien que tout marche, j'ai de gros problemes en tout ce qui concerne le transfert du fichier requis par l'utilisateur ;
 
1) Le transfert se bloque a +- 18-19Mo
2) Dans le fichier (corrompu a cause de 1), je peux lire des en tetes suivants :
 
HTTP/1.1 200 OK
Date: Sun, 15 Oct 2006 16:02:47 GMT
Server: Apache/ProXad [Jul 17 2006 17:19:17]
Last-Modified: Sun, 15 Oct 2006 15:31:57 GMT
ETag: "43dddb-2faf080-4532546d"
Connection: close
Accept-Ranges: bytes
Content-Length: 50000000
Content-Type: text/plain
 
Déja, étant donné que le fichier est un RAR, je suppose que ces entetes HTTP n'ont rien a foutre dans mon fichier. Comment faire pour que cela n'arrive pas
 
Merci d'avance ;)
 
WiiDS
 
Le code :
 

Code :
  1. $fichierRequis = 'photos.rar';
  2. $informationsFichier = array('taille' => '50000000');
  3. @ini_set('zlib.output_compression', 'Off');
  4. @header('Pragma: public');
  5. @header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  6. @header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
  7. @header('Content-Transfer-Encoding: none');
  8. @header('Content-Type: application/octetstream; charset=iso-8859-1; name="'.$fichierRequis.'"');
  9. @header('Content-Disposition: attachement; filename="'.$fichierRequis.'"');
  10. @header('Content-Length: '.$informationsFichier['taille']);
  11. $pathCompletFichierRequis = 'fichiers/'.$fichierRequis;
  12. readfile($pathCompletFichierRequis);


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 19-10-2006 à 13:38:32   

Reply

Marsh Posté le 19-10-2006 à 13:54:21    

peut etre que le telechargement est trop long par rapport au temps d'execution maxi de ton script ( set_time_limit en debut de script pour modifier ca )

Reply

Marsh Posté le 19-10-2006 à 19:24:39    

Ok vais voir merci ;)
 
EDIT : Ca ne marche pas toujours cause : Safe mode
 
Il me faudrait donc une solution plus universelle ;)


Message édité par WiiDS le 19-10-2006 à 19:42:43
Reply

Marsh Posté le 21-10-2006 à 21:52:59    

UP :'(

Reply

Marsh Posté le 27-10-2006 à 14:52:53    

Bon je résume :
 
- Probleme de lecture du fichier qui stoppe le téléchargement au bout d'un certain temps. Ne veut pas utiliser ini_set() car impossible a cause de Safe mode et mon script doit être le plus universel possible
 
- Probleme d'headers HTTP qui s'inscrivent dans le fichier et qui le corrompt.
 
Mon but : Protéger les fichiers contre le leech.
 
C'est le seul moyen que j'avais trouvé mais a cause de ca je suis bloqué ...
 
Le dossier contenant les fichiers a un .htaccess n'autorisant que 127.0.0.1 a lire / écrire les fichiers


Message édité par WiiDS le 27-10-2006 à 14:55:04
Reply

Marsh Posté le 27-10-2006 à 15:16:09    

ton fichier fait pile poil 50000000 octets, pas un de plus/moins ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 15:23:10    

Salut il s'agit d'un formulaire d'upload ?
 
Si non, je pige pas pourquoi les headers serait changés .

Reply

Marsh Posté le 27-10-2006 à 15:23:54    

c'est un script d'antileech...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 15:48:25    

Sh@rdar a écrit :

ton fichier fait pile poil 50000000 octets, pas un de plus/moins ?


C'était un exemple ;) Ca varie, ca peut très bien être 1 octet comme 10 000 000 000 octets :p

Reply

Marsh Posté le 27-10-2006 à 15:55:22    

mais l'entête envoyé est bon niveau taille ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 15:55:22   

Reply

Marsh Posté le 27-10-2006 à 16:13:21    

Je récupère la taille par un filesize() donc je dirais que c'est bon de plus la taille varie [:spamafote]

Reply

Marsh Posté le 27-10-2006 à 16:25:30    

tu peux filer le vrai code et complet stp ?


Message édité par Sh@rdar le 27-10-2006 à 16:25:41

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 16:31:25    

à priori avec des gros fichiers ça déconne :/  
 
tu devrais passer via un fopen et une boucle pour le lire


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 16:43:53    

--- censuré ---


Message édité par WiiDS le 24-01-2007 à 17:47:57
Reply

Marsh Posté le 27-10-2006 à 17:36:31    

la vache :eek:
 
et t'es sur que l'entête de taille est bon ? pourquoi tu fais pas un filesize() directement sur le fichier pour l'avoir ?
 
et pourquoi un ob_end_clean ? tu utilise pas bufffer à priori..


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 17:49:34    

Sh@rdar a écrit :

la vache :eek:
 
et t'es sur que l'entête de taille est bon ? pourquoi tu fais pas un filesize() directement sur le fichier pour l'avoir ?
et pourquoi un ob_end_clean ? tu utilise pas bufffer à priori..


J'en fais un indirectement car le script permet d'ajouter / supprimer les fichiers du dossier /fichiers/ qui pourront être téléchargés et lors de cet ajout un filesize est effectué. J'ai choisi de faire ainsi car ca économise un peu les ressources du serveur (si 100 personnes téléchargent un fichier ca fera 100 filesize ...)
 
j'ai lu qu'il fallait faire un ob_end_clean alors j'en fais un :D Mais je peux l'enlever si c'est inutile ;)
 
C'est si mauvais que ca le script ? :sweat:

Reply

Marsh Posté le 27-10-2006 à 17:54:37    

disons que ça pourrait être largement simplifié, surtout les if () exit à répétition :/ et tu devrais penser à commenter aussi
 
faudrait virer tous les entêtes et ne laisser que la taille et le content-type pour commencer
 
t'aurais pas une url ?


Message édité par Sh@rdar le 27-10-2006 à 17:56:40

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 27-10-2006 à 18:09:23    

Ok merci faudra que j'optimise ;)
 
Je te file une url en pv dans qques minutes ;)
 
Pour les entetes, je remplace donc
 
@header('Pragma: public');
@header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
@header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
@header('Content-Transfer-Encoding: none');
@header('Content-Type: application/octetstream; name="'.$fichierRequis.'"');
@header('Content-Disposition: attachement; filename="'.$fichierRequis.'"');
@header('Content-Length: '.$informationsFichier['taille']);
@header("Accept-Ranges: ".$informationsFichier['taille']);
 
par
 
@header('Content-Type: application/octetstream; name="'.$fichierRequis.'"');
@header('Content-Length: '.$informationsFichier['taille']);
 
?

Reply

Marsh Posté le 27-10-2006 à 18:55:55    

Salut je connaissais pas le label antileech mais je vais te donner des pistes pour résoudre ton problème:
 
1- forcer l'utilisateur à se connecter  
2 - forcer un télechargement d'un petit fichier 200 ko ( interlude par ex )
3 - déduire la bande passante du client en fonction mis pour passer entre les pages  
4 - utiliser un identifiant basé sur le temps et un seeds + IP
 
J'espere que ca va aider  :jap:

Reply

Marsh Posté le 28-10-2006 à 13:38:54    

Re a tous,
 
Toujours dans la mouise avec le problème. Il est maintenant plus que certain que la solution que j'ai choisie ne correspondait pas a mes exigeances vis a vis des hébergeurs gratuits :hello:
 
WiiDS :hello:

Reply

Marsh Posté le 06-11-2006 à 22:28:09    

Up \o/

Reply

Marsh Posté le 24-01-2007 à 17:48:14    

Up aucas ou :o

Reply

Marsh Posté le 24-01-2007 à 20:28:12    

Ca merde où parce que c'est pas clair :???:

Reply

Marsh Posté le 21-02-2007 à 21:17:41    

leflos5 a écrit :

Ca merde où parce que c'est pas clair :???:


 
 
Au niveau du téléchargement, il coupe souvent a quelques secondes du début :??:  
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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