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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
파일을 다운 받고자 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('존재하지 않는 파일입니다.');
}
?>​
답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

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