Transfert de fichier qui bloque - PHP - Programmation
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 )
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
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
Marsh Posté le 27-10-2006 à 15:16:09
ton fichier fait pile poil 50000000 octets, pas un de plus/moins ?
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 .
Marsh Posté le 27-10-2006 à 15:23:54
c'est un script d'antileech...
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
Marsh Posté le 27-10-2006 à 15:55:22
mais l'entête envoyé est bon niveau taille ?
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
Marsh Posté le 27-10-2006 à 16:25:30
tu peux filer le vrai code et complet stp ?
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
Marsh Posté le 27-10-2006 à 16:43:53
--- censuré ---
Marsh Posté le 27-10-2006 à 17:36:31
la vache
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..
Marsh Posté le 27-10-2006 à 17:49:34
Sh@rdar a écrit : la vache |
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 Mais je peux l'enlever si c'est inutile
C'est si mauvais que ca le script ?
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 ?
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']);
?
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
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
WiiDS
Marsh Posté le 24-01-2007 à 20:28:12
ReplyMarsh 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
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 :
---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010