Le script suivant est ce que j'utilise habituellement pour transférer les en-têtes vers le navigateur afin que la boîte de dialogue s'affiche pour permettre aux utilisateurs de télécharger un fichier.Comment faire pour télécharger des en-têtes à partir d'un fichier sur un serveur externe?
Cependant, dans ce cas, le fichier réside sur un serveur différent. Je pense que cela ne devrait faire aucune différence, mais c'est comme quand j'exécute ce script avec l'URL d'un fichier MP3 externam, il me donne un "ERREUR: Fichier non trouvé". Cependant, ce fichier existe et je peux y accéder en utilisant la même URL que celle que je passe à ce script.
Des idées pourquoi? J'apprécierais toute aide.
<?php session_start();
//below variable contains full path to external site where file resides
$filename = $_SESSION['$serverURL'].'audio/'.$_SESSION['fileName'].'.mp3';
//below variable contains a chosen filename of the file to be downloaded
$properFilename = $_GET['properFilename'].'.mp3';
// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));
if($filename == "")
{
//echo "download file NOT SPECIFIED";
exit;
} elseif (! file_exists($filename))
{
//echo "ERROR: File not found";
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"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
?>
Nous vous remercions de votre réponse. J'ai fait une erreur avec la variable de session. Cela aurait dû être $ _SESSION ['serverURL']. Après avoir corrigé cela, j'ai toujours eu le même problème. J'ai même supprimé la ligne envoyant la taille de fichier. Même alors, ça ne fonctionnait toujours pas! – Abs
Il a effectivement fonctionné quand j'ai enlevé les conditionnels vérifiant si le fichier existe. Et j'ai ajouté les lignes ob_clean(); flush(); avant le fichier readfile(); Je vais essayer d'implémenter votre getter de taille CURL. :) – Abs