테스트 사이트 - 개발 중인 베타 버전입니다

파일을 다운 받고자 php작업을 했는데 뭐가 문제일까요? 채택완료

꾸러기님 10년 전 조회 3,629

 

     

 

..........................여기서부터 filedown.php인데 파일다운받고자 그림 클릭하면  아래 처럼 나옵니다..뭐가 문제일까요..

 

include_once("$g4[path]/head.sub.php"); include_once("$g4[path]/lib/outlogin.lib.php");

ob_start(); $downfile = $_GET[downfile]; $downfiledir = "./dfiles/" ; // 파일이 있는 위치

if ( file_exists($downfiledir.$downfile) ) {  //header("Content-Type: application/octet-stream");  //Header("Content-Disposition: attachment;; filename=$downfile");  //header("Content-Transfer-Encoding: binary");  //Header("Content-Length: ".(string)(filesize($downfiledir.$downfile)));  //Header("Cache-Control: cache, must-revalidate");  //header("Pragma: no-cache");  //header("Expires: 0");

 $fp = fopen($downfiledir.$downfile, "rb"); //rb 읽기전용 바이러니 타입

    while ( !feof($fp) )  {   echo fread($fp, 100*1024); //echo는 전송을 뜻함.           }

 fclose ($fp);

 flush(); //출력 버퍼비우기 함수.. } else {  echo("존재하지 않는 파일입니다."); }

?>​

 

 

 


 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

10년 전
다시보니 상단에 불필요한 include가 있군요.
특히 head.sub.php가 오동작을 일으킨 주요인일 수 있겠네요.
상단의 include_once 3개를 모두 지우고 테스트 해보시고 잘되면 아래의 소스를 적용해보세요.
header부분과 함께 최근버전에 맞춰 적용해서 수정해봤습니다.
basename() 부분은 보안부분때문에 처리하라는 거였습니다. 넣어두시는게 좋습니다.
include_once('./_common.php');
$downfile = $_GET[downfile];
$downfile = basename($downfile);
if(preg_match('/\.php$/i',$downfile)) alert('잘못된 접근입니다.');
$filepath = './dfiles/'.$downfile
if (file_exists($filepath)) {
    if(preg_match('/msie/i', $_SERVER['HTTP_USER_AGENT']) && preg_match('/5\.5/', $_SERVER['HTTP_USER_AGENT'])) {
        $content_type = 'doesn/matter';
        $content_transfer_encoding = 'content-transfer-encoding: binary';
    } else {
        $content_type = 'file/unknown';
        $content_transfer_encoding = 'content-description: php generated data';
    }
    header('content-type: '.$content_type);
    header('content-length: '.filesize($filepath));
    header('content-disposition: attachment; filename="'.$downfile.'"');
    header($content_transfer_encoding);
    header('pragma: no-cache');
    header('expires: 0');
    flush();
    $fp = fopen($filepath, 'rb'); //rb 읽기전용 바이러니 타입
    $download_rate = 10;
    while ( !feof($fp) ) { 
        print fread($fp, round($download_rate * 1024));
        flush();
        usleep(1000);
    }
    fclose ($fp);
    flush(); //출력 버퍼비우기 함수.. 
} else {
    alert('존재하지 않는 파일입니다.');
}
?>​
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

꾸러기님
10년 전
head.sub.php 이파일들이 문제를 일으킨것 같습니다 지우고 먼지손님이 올려준 대로 했더니 작동합니다..감사감사..실력이 대단하십니다

댓글을 작성하려면 로그인이 필요합니다.

10년 전

header()를 전부 주석처리 하셔서 그런건 아닐까 싶은데요..

 

그나저나 $downfile 변수를 조금 더 처리하셔야 할듯한... 

download.php?downfile=../dbconfig.php 이런것도 가능하지 않을까요? +_+; 

하다못해

$downfile = $_GET[downfile]; 

$downfile = basename($downfile);

이렇게 basename 처리라도 한번 해주심이..

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

꾸러기님
10년 전
1. 주석 처리된걸 원 상태로 해보았더니 그림처럼 이상하게 그대로 나오더군요

2. basename 처리도 해보았는데도 똑같은 결과입니다



원래 코딩실력이 미천하여 다른 홈페이지에 사용하던 걸

받아와서 쓰는것인데 그 쪽에서는 제대로 되는데

여기와서는 안되는군요..주석처리 된 부분은 다른 홈페이지에서 사용하던 것이라

사용안하는 겁니다..미치겠습니다^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인