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

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

QA

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

본문

<img src="<?=$g4['path']?>/img/main_middle_5_sub.jpg" border="0" usemap="#Mapicon">

 

<map name="Mapicon">
      <area shape="rect" coords="60,115,290,160" href="<?=$g4['path']?>/download.php?downfile=TeamViewer_Setup507687.exe">

</map>

 

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

<?

include_once("$g4[path]/lib/latest.lib.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("존재하지 않는 파일입니다.");
}

?>​

 

 

 

44644047fc8d4420f064bb80388fbefa_1417670328_8906.jpg
 

이 질문에 댓글 쓰기 :

답변 2

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

 

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

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

하다못해

$downfile = $_GET[downfile]; 

$downfile = basename($downfile);

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

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

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

 

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

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

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

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

다시보니 상단에 불필요한 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('존재하지 않는 파일입니다.');
}
?>​
답변을 작성하시기 전에 로그인 해주세요.
전체 5
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT