Pb telechargement de fichier avec PHP

Le
Christophe
Salut a tous,

J'ai un script qui permet de télécharger des fichiers (n'importe quel type
de fichier), le problème est que le téléchargement s'arrête avant que toutes
les données soit transmissent (sur un fichier de 60 mo j'ai que 20 mo par
exemple, et quelque fois il me manque que quelque ko), et il n'y as pas de
pb quand je télécharge un fichier en direct sans passer par PHP

Voici mon script :

.free.fr/systeme/download.php?path=./Photos/2007-02-24.zip

download.php:
<?
include'configuration.php';
include'log.php';
$path=urldecode($path);
if(strtolower(substr(strrchr(basename($path),'.'),1))=='php')$path="";
header("Content-disposition: attachment; filename=".basename("$path"));
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize("../$path"));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile("../$path");
?>

pour info mon site est chez free


Merci pour votre aide.


Chris
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thierry
Le #76202
"Christophe" message de news: 45e5a1e4$0$28546$
Salut a tous,

J'ai un script qui permet de télécharger des fichiers (n'importe quel type
de fichier), le problème est que le téléchargement s'arrête avant que
toutes les données soit transmissent (sur un fichier de 60 mo j'ai que 20
mo par exemple, et quelque fois il me manque que quelque ko), et il n'y as
pas de pb quand je télécharge un fichier en direct sans passer par PHP


Ca marche avec des petits fichiers ?
Regarde a la fin de ton fichier de 20Mo si il n'y pas une erreur PHP
relative au timeout.
Si c'est le cas, rien a faire, ce n'est pas possible de changer le timeout
chez Free.

P'tit Marcel
Le #76201
Voici mon script :
.....free.fr/systeme/download.php?path=./Photos/2007-02-24.zip


Le protocole http n'est pas fait pour télécharger 60Mo. Il faudrait
plutôt employer ftp (éventuellement grâce à du flash sur le client mais
je ne connais pas trop). Tu devrais également sécuriser ton script en :


download.php:
<?
include './securise/configuration.php';
include './securise/log.php';


où securise est un répertoire protégé par un fichier htaccess.
Attention, il me semble que free impose une syntaxe inhabituelle pour
les htaccess.


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Christophe
Le #76199
"Thierry" 45e5b1ba$0$28541$
"Christophe" le message de news: 45e5a1e4$0$28546$
Salut a tous,

J'ai un script qui permet de télécharger des fichiers (n'importe quel
type de fichier), le problème est que le téléchargement s'arrête avant
que toutes les données soit transmissent (sur un fichier de 60 mo j'ai
que 20 mo par exemple, et quelque fois il me manque que quelque ko), et
il n'y as pas de pb quand je télécharge un fichier en direct sans passer
par PHP


Ca marche avec des petits fichiers ?
Regarde a la fin de ton fichier de 20Mo si il n'y pas une erreur PHP
relative au timeout.
Si c'est le cas, rien a faire, ce n'est pas possible de changer le timeout
chez Free.


Oui ca marche pour les petits fichiers (3 - 4 mo), non il n'y a pas d'erreur
php dans le fichier.


davel_x
Le #75967
Salut a tous,

J'ai un script qui permet de télécharger des fichiers (n'importe quel type
de fichier), le problème est que le téléchargement s'arrête avant que toutes
les données soit transmissent (sur un fichier de 60 mo j'ai que 20 mo par
exemple, et quelque fois il me manque que quelque ko), et il n'y as pas de
pb quand je télécharge un fichier en direct sans passer par PHP


Juste au cas où, car ça m'est arrivé il y a peu, vérifie qu'il n'y ait
pas de compression gzip automatique des pages générées par PHP.
Si c'est le cas désactive la sur ce script en particulier.


--
**davel**
http://www.davel.fr/blog/

thierry
Le #75969
pour le modérateur:
je ne sais pas s'il faut le publier
copie envoyée à l'auteur

pour l'auteur:
il se passe quoi avec ton script si on appelle:

....free.fr/systeme/download.php?path=./systeme/configuration.php+

pour se convaincre il faut faire un 'visualiser code source' sur la page
renvoyée.

il faudrait peut être ajouter un trim() dans ton test
if(strtolower(substr(strrchr(basename($path),'.'),1))=='php')$path="";


amicalement

thierry

PS: le code du test fait sur un wXPpro + apache 2.0 + php5
requête GET http://dev.local/test/test.php?path=config.php+
<?php
$path = $_REQUEST['path'];
$path = urldecode($path);
if (strtolower(substr(strrchr(basename($path),'.'),1))=='php') {
echo "canaille... PHP!!!";
exit;
}
echo $path."<hr />";
$i = readfile($path);
echo "<hr />$i";
?>


je récupère bien le contenu du fichier config.php

Publicité
Poster une réponse
Anonyme