다음 스크립트는 사용자가 파일을 다운로드 할 수 있도록 대화 상자가 표시되도록 브라우저에서 헤더를 푸시하는 데 일반적으로 사용하는 스크립트입니다.외부 서버의 파일에서 헤더를 다운로드하는 방법은 무엇입니까?
그러나이 경우 파일은 다른 서버에 있습니다. 비록이 차이가 없어야하지만 externam MP3 파일의 URL로이 스크립트를 실행하면 "오류 : 파일을 찾을 수 없습니다"라는 메시지가 나타납니다. 그러나이 파일은 존재하며이 스크립트에 전달한 동일한 URL을 사용하여이 파일에 연결할 수 있습니다.
왜 그런가? 나는 어떤 도움을 주셔서 감사합니다.
<?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();
?>
답장을 보내 주셔서 감사합니다. 나는 실제로 세션 변수로 실수를했다. 그것은 $ _SESSION [ 'serverURL']이어야합니다. 이 문제를 해결 한 후에도 같은 문제가 발생했습니다. 파일 크기를 보내는 줄도 제거했습니다. 그럼에도 여전히 효과가 없었습니다! – Abs
파일이 있는지 조건부 검사를 제거했을 때 실제로 작동했습니다. 그리고 줄을 추가했습니다. ob_clean(); flush(); readfile(); 앞에; 귀하의 CURL 크기 게터를 구현하려고합니다. :) – Abs