Discussion:
Pb telechargement de fichier avec PHP
(trop ancien pour répondre)
Christophe
2007-02-28 16:13:11 UTC
Permalink
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\n");
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
Thierry
2007-02-28 17:13:01 UTC
Permalink
Post by 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
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.
Christophe
2007-02-28 19:17:30 UTC
Permalink
Post by Thierry
Post by 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
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.
P'tit Marcel
2007-02-28 17:16:28 UTC
Permalink
.....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
<?
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/
davel_x
2007-02-28 22:51:19 UTC
Permalink
Post by 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
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
2007-02-28 22:51:19 UTC
Permalink
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
Post by Christophe
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

Continuer la lecture sur narkive:
Loading...