PHP Forcer Téléchargement Causant des Fichiers de 0 Octet
Je suis en train de forcer le téléchargement des fichiers à partir de mon serveur web en utilisant PHP.
Je ne suis pas un pro en PHP mais je n'arrive pas à contourner le problème de téléchargement des fichiers de 0 octets.
CODE:
$filename = "FILENAME...";
header("Content-type: $type");
header("Content-Disposition: attachment;filename=$filename");
header("Content-Transfer-Encoding: binary");
header('Pragma: no-cache');
header('Expires: 0');
set_time_limit(0);
readfile($file);
Quelqu'un peut-il aider?
Merci.
Êtes-vous sûr que le fichier spécifié existe en utilisant ce chemin et a un peu de contenu?
Juste une petite remarque, mais vous devez regarder pour une traversée de répertoire. Un potentiel attaquant pourrait utiliser, par exemple, "../../../../var/www/config.php" et peut lire les données sensibles.
toute solution de ce problème, face au même problème
Juste une petite remarque, mais vous devez regarder pour une traversée de répertoire. Un potentiel attaquant pourrait utiliser, par exemple, "../../../../var/www/config.php" et peut lire les données sensibles.
toute solution de ce problème, face au même problème
OriginalL'auteur Alex | 2011-01-16
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas de vérifier que le fichier existe. Essayez d'utiliser ceci:
Et voir ce que vous obtenez.
Vous devriez noter également que cette forces de téléchargement comme un flux d'octets, un simple fichier binaire. Certains navigateurs auront de la difficulté à comprendre le type exact du fichier. Si, par exemple, vous pouvez envoyer un GIF avec un en-tête de
Content-Type: application/octet-stream
, puis le navigateur ne peut pas le traiter comme une image GIF. Vous devez ajouter dans les contrôles spécifiques à déterminer quel est le type de contenu du fichier, et envoyer un appropriéContent-Type
en-tête.Cela fonctionne, je pense que vous avez besoin de prolonger votre question avec quel navigateur vous utilisez, ce que le fichier est, où il se trouve, les autorisations du fichier dir, et ce que votre serveur en cours d'exécution.
merci pour cette. J'ai eu l'0 octet problème avec les fichiers ppt. Le ob_clean() et flush() avant le stream_get_contents() a contribué à la.
Merci cela m'a sauvé quelques temps.
En fonction PHP du site, php.net/manual/en/function.readfile.php#102137 header('Content-Length:' . filesize($fichier)); $fichier devrait vraiment être le chemin complet vers le fichier. Sinon, la longueur du contenu ne sera pas toujours ensemble, ce qui entraîne souvent le redoutable "fichier de 0 octet" problème. Ou tout simplement essayer comme ceci header('Content-Length:' . filesize($filePath)); le Premier set path comme ça et il a immédiatement fonctionné pour moi et 0 OCTETS problème résolu!!!
OriginalL'auteur RobertPitt
Vous devez spécifier le
Content-Length
en-tête:Aussi, vous ne devriez pas envoyer un
Content-Transfer-Encoding
en-tête. Les deux HTTP/1.0 et HTTP/1.1 spécifications état "HTTP ne pas utiliser le Content-Transfer-Encoding (CTE) du champ de la RFC 1521".OriginalL'auteur Daniel Trebbien
J'utilise la méthode suivante dans phunction et je n'ai pas eu de problèmes avec elle jusqu'à présent:
Vous pouvez l'essayer, tout simplement en faisant:
Merci beaucoup, mais il ne semble pas fonctionner :/
Je pense que peut être le problème... Essayez de spécifier le chemin absolu pour le fichier, quelque chose comme
$filename = 'C:/www/test.zip';
.Si j'ai voulu créer mon propre CDN, puis-je mettre en place un cache Squid avec un délai de piscines: faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
Êtes-vous sur Linux ou Windows? Imaginez que le chemin absolu vers le
Letter.txt
fichier est/home/user/docs/Letter.txt
, si votre répertoire de travail actuel est/home/user/
le chemin relatif vers le fichier est./docs/Letter.txt
cependant le chemin absolu est toujours le même (/home/user/docs/Letter.txt
) n'importe où vous êtes... C'est un peu dur à expliquer clairement dans un commentaire et j'aimerais savoir votre système de fichiers de la structure pour vous donner une réponse précise, lire cette (en.wikipedia.org/wiki/Path_(informatique)) peut-être que cela vous aide.OriginalL'auteur Alix Axel
Ce problème comme même que mon projet de site web. Ce code que j'ai utilisé:
Je pense que le problème est sur le serveur, comme PHP ou le paramètre de cache, mais je n'ai pas d'idée pour faire ce que mon opinion.
OriginalL'auteur ahmedkuzza
je fais cela pour télécharger un fichier PDF ...
je pense que vous êtes absent de la dernière ligne, où vous envoyer le contenu du fichier de ce que vous avez à
$file
.Pablo
OriginalL'auteur pablo
Le fichier ouvert ok pour moi quand j'ai changé le répertoire à l'emplacement du fichier.
OriginalL'auteur schdctorres
Le truc, c'est de vérifier avec file_exists pour confirmer le bon chemin.
La grande confusion, c'est que pour PHP chemins vous n'avez pas besoin de commencer avec un '/' pour dire votre accueil du site web de chemin.
en php /est le site web principal chemin d'accès déjà, vous n'avez pas besoin de le mentionner. Juste:
Cela fonctionne avec file_exists, en-tête le nom de fichier, readfile, etc...
OriginalL'auteur Sergio Abreu