Pb de download forcé depuis une url distante

Signaler
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
    Salut... j'ai un petit problème de download forcé depuis une url distante ( j'entends pas sur le même serveur que le script)...

j'ai le code suivant qui permet de forcer le téléchargement

if (file_exists($fichier)){
            // On d?marre le t?l?chargement du fichier 
            header("Content-disposition: attachment; filename=$nomfichier");
            header("Content-Type: application/force-download");
            header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
            header("Content-Length: ".filesize($fichier));
            header("Pragma: no-cache");
            header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
            header("Expires: 0");
            readfile($fichier);

quand j'envoie $nomfichier du style download/monfichier.pdf (sur le même serveur) ça marche impec ...
en revanche si j'envoie http://www.site.com/dossier/monfichier.pdf ça ne fonctionne pas ... Vous savez si c'est possible de faire fonctionner ça ? et de forcer le download depuis une url distante ?

merci bcp :)
@++

11 réponses

Messages postés
151
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 juillet 2018

ça ne marche pas, simplement parce que file_exists() ne permet pas de verifier l'existance d'un document sur un serveur distant
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!

A la place de file_exists, tu peux tenter une ouverture en lecture (
fopen( $fichier, 'r' ) ) ; si ça marche, le fichier existe... :)


@++


R@f

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

plutôtles sockets, il y a plus de chances que cela fonctionne.
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
ah yes ..
effectivement je n'avais pas pensé à ça .. lol ..
je vais essayer ce que vous me dites :)
euh ...juste une question ...les sockets ça marche comment (je dis ça mais je vais chercher de ce pas ;) )
@++ merci
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    Salut ...
bon j'ai essayé avec du readfile, du fopen et du file_get_content ...
il me retourne toujours
Warning:
file_get_contents(http://nhgdth.free.fr/ee/telechargements/dwlz/plaquette.pdf):
failed to open stream: Bad file descriptor in

je capte pas ...
sinon les sockets j'ai un peu rehgardé mais j'ai pas très bien capté le principe :(
merci
@+

ps : je trourne en local avec easyphp (au cas où)
Messages postés
861
Date d'inscription
mardi 26 mars 2002
Statut
Membre
Dernière intervention
29 novembre 2006
1
Sael og blesuð

download.php :

<?php
$filename = $_GET['file'];
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
$file_extension = strtolower(substr(strrchr($filename,"."),1));
if( $filename == "" ){
    echo '<html> ERROR: download file NOT SPECIFIED. </html>';
    exit;
} elseif ( ! fopen( $filename,'r') ){
    echo '<html>ERROR: File not found.</html>';
    exit;
};
switch( $file_extension ){
    case "pdf": $ctype ="application/pdf"; break;
    case "exe": $ctype="application/octet-stream"; break;
    case "zip": $ctype="application/zip"; break;
    case "doc": $ctype="application/msword"; break;
    case "xls": $ctype="application/vnd.ms-excel"; break;
    case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    default: $ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

?>

Puis après faire download.php?file=http://site.com/fichier.ext

Bon courage ...

NB : Si la réponse vous convient merci de l'accepter pour fermer ce thread ...

Sigurjón Birgir Sigurðssón aka Sjón
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

même problème avec readfile()... ;-)
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    ouai readfile ça ne marche pas non plus :o'(
je sais pas si c'est possible en fait...
++
Messages postés
861
Date d'inscription
mardi 26 mars 2002
Statut
Membre
Dernière intervention
29 novembre 2006
1
Sael og blesuð

Bah moi cela marche ... :-) cependant votre fichier http://nhgdth.free.fr/ee/telechargements/dwlz/plaquette.pdf n'existe pas ...

Bon courage ...

NB : Si la réponse vous convient merci de l'accepter pour fermer ce thread ...

Sigurjón Birgir Sigurðssón aka Sjón
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    salut sjon ...
toutes mes excuses je n'avais pas vu le code posté plus haut ...j'était un peu fatigué hier soir je crois ...
je vais tester ça dessuite :)
sinon c'est normal que le fichier n'existe pas j'ai mis une adresse "exemple" non valide :)
voila
merci !!
@++
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    re ... bon ben je viens de tester et  toujours cette même erreur

fopen(http://site.free.fr/telechargements/dwlz/plaquette.pdf):
failed to open stream: Bad file descriptor in c:\nans\web\download_force\index.php on line 9

ERROR: File not found.

je ne sais pas à quoi c'est du :( la version de php ?
le fait d'être en local ?
++