8주차 과제(WEB)_2

Peroro·2023년 5월 22일
0
post-custom-banner

이전 과제: https://velog.io/@azurp158/8주차-과제WEB

결과물

  • 업로드했던 파일을 다운로드할 수 있게 만들었다.

코드

// 이전 read.php 일부
    <div>
        <p><a href="./file/upload/<?php echo $row['file'];?>"> <?php echo $row['file'];?> 다운하기</a></p>
    </div>
// read.php 일부
    <div>
        <p><a href="download.php?file=<?php echo $row['file'];?>"> <?php echo $row['file'];?> 다운하기</a></p>
    </div>
  • 서버에 저장되어 있는 파일을 불러오는 이전 코드와는 다르게 현재 코드는 download.php에게 GET 방식으로 file 이름을 전달한다.
//download.php
<?php
    $file = $_GET['file'];
    $filesize = filesize($file);
    $filedir = "./file/upload/".$file;

    header('Content-Type: application/x-octetstream');
    header('Content-Length: '.filesize($filedir));
    header('Content-Disposition: attachment; filename='.$file);
    header('Content-Transfer-Encoding: binary');

    $fp = fopen($filedir, "r");
    fpassthru($fp);
    fclose($fp);
?>
  • header의 경우 content-type, content-length, content-disposition, content-transfer-encoding와 같은 헤더를 설정한다.
  • fpassthru는 현재 열려있는 파일 포인터로부터 데이터를 읽어 클라이언트로 직접 전송한다.
profile
오늘 공부한 것을 올리는 공간 / 일주일에 글 3개 / 블로그 이전 : https://perorochan321.tistory.com/
post-custom-banner

0개의 댓글