728x90

    럭키-[이모티콘]어밴드

     

    소개

    웹 개발에서는 동적으로 파일을 생성하고 다운로드해야 하는 상황이 자주 발생합니다. 이 튜토리얼에서는 배열 데이터를 텍스트 파일로 생성하고, 사용자가 이를 다운로드할 수 있도록 하는 간단한 PHP 스크립트를 설명합니다.

    PHP 스크립트

    다음은 우리가 논의할 PHP 스크립트입니다:

    <?php
    $dataSet = ['https://example.com', 'https://example.org', 'https://example.net'];
    
    $file_content = implode(PHP_EOL, $dataSet);
    
    // Setting headers for file download
    header('Content-Type: text/plain');
    header('Content-Disposition: attachment; filename="urls.txt"');
    header('Content-Length: ' . strlen($file_content));
    header('Pragma: no-cache');
    header('Expires: 0');
    
    // Outputting the file content
    echo $file_content;
    exit();
    ?>

    이 스크립트가 하는 일과 그 작동 방식을 단계별로 살펴보겠습니다.

    단계별 설명

    1. 데이터 준비

    $dataSet = ['https://example.com', 'https://example.org', 'https://example.net'];
     

    여기서는 $dataSet이라는 배열을 정의하여 여러 URL을 포함시킵니다. 이 배열은 텍스트 파일에 작성될 데이터를 나타냅니다.

    2. 파일 내용 생성

    $file_content = implode(PHP_EOL, $dataSet);
     

    implode 함수는 배열의 요소를 하나의 문자열로 결합합니다. PHP_EOL은 플랫폼에 적합한 줄바꿈 문자를 나타내는 PHP의 사전 정의된 상수입니다. 이를 통해 배열의 각 URL이 텍스트 파일의 새로운 줄에 위치하게 됩니다.

    3. 파일 다운로드를 위한 헤더 설정

    생성된 내용을 파일로 다운로드하도록 브라우저에 지시하려면 여러 HTTP 헤더를 설정해야 합니다:

    header('Content-Type: text/plain');

    이 헤더는 파일의 MIME 타입을 지정합니다. 여기서는 텍스트 파일을 생성하므로 text/plain으로 설정합니다.

    header('Content-Disposition: attachment; filename="urls.txt"');

    Content-Disposition 헤더는 브라우저에 파일을 첨부 파일로 다운로드하도록 지시하며, filename 매개변수는 파일의 이름을 지정합니다.

    header('Content-Length: ' . strlen($file_content));

    Content-Length 헤더는 파일의 크기를 바이트 단위로 지정합니다. strlen 함수를 사용하여 파일 내용의 길이를 계산합니다.

     
    header('Pragma: no-cache'); header('Expires: 0');

    이 헤더들은 브라우저가 파일을 캐시하지 않도록 설정합니다. 이를 통해 사용자가 항상 최신 버전의 파일을 다운로드하도록 합니다.

    4. 파일 내용 출력

    echo $file_content; exit();

    마지막으로 echo를 사용하여 파일 내용을 출력합니다. exit() 함수는 스크립트를 즉시 종료하여 추가 출력을 방지합니다.

    전체 코드

    이 PHP 스크립트를 서버에서 실행하고 브라우저로 접근하면, 사용자는 $dataSet 배열에 지정된 URL을 각 줄에 포함한 urls.txt라는 텍스트 파일을 다운로드하라는 메시지를 받게 됩니다.

    Posted by 천상나타