2010-10-29 13 views
4

J'ai besoin de mon serveur pour agir comme un proxy entre un serveur tiers (où le fichier est situé à l'origine) et l'utilisateur final. Autrement dit, mon serveur télécharge le fichier à partir du serveur tiers et, séquentiellement, l'utilisateur le télécharge depuis mon serveur. Cela devrait entraîner une bande passante encourue de deux fois la taille du fichier. Comment ce processus peut-il être réalisé en utilisant PHP?Comment utiliser mon serveur comme proxy pour télécharger des fichiers via PHP?

Répondre

12

Très très simplement comme ceci:

$url = $_GET['file']; 
$path_parts = pathinfo($url); 

$ext = $path_parts['extension']; 
$filename = $path_parts['filename']; 

header("Content-type: application/$ext"); 
header("Content-Disposition: attachment; filename=$filename"); 

echo file_get_contents($url); 

Si le fichier est plus grand que quelques méga-octets, utilisez fopen fread et télécharger le fichier frwrite en morceaux et envoyer au client en morceaux.

+0

Vous pouvez utiliser 'header (" Content-Disposition: attachment; filename = \ "$ filename \" ");' si votre nom de fichier contient des espaces – SapuSeven

3
 $fp = fopen($url, 'rb'); 
     foreach (get_headers($url) as $header) 
     { 
      header($header); 
     } 

     fpassthru($fp); 
     exit; 

Ceci va simplement télécharger un fichier distant dans le navigateur avec des en-têtes corrects.