복붙노트

PHP는 다운로드를 위해 파일을 생성 한 다음 리디렉션합니다.

PHP

PHP는 다운로드를 위해 파일을 생성 한 다음 리디렉션합니다.

헤더를 사용하여 다운로드해야하는 CSV 파일을 만드는 PHP 앱이 있습니다. 다음은 코드의 관련 부분입니다.

header('Content-Type: application/csv'); 
header("Content-length: " . filesize($NewFile)); 
header('Content-Disposition: attachment; filename="' . $FileName . '"'); 
echo $content;
exit(); 

내가하고 싶은 것은 파일이 만들어지고 다운로드 프롬프트가 전송 된 후 사용자를 새 페이지로 리디렉션하는 것입니다. 끝 부분에 헤더 ( "Location : / newpage")를 추가하는 것은 예상대로 작동하지 않았으므로 이것을 어떻게 조작할지는 모르겠습니다.

해결법

  1. ==============================

    1.나는 이것이 할 수 있다고 생각하지 않는다. 비록 내가 100 % 확실하지는 않지만.

    나는 이것이 할 수 있다고 생각하지 않는다. 비록 내가 100 % 확실하지는 않지만.

    일반적인 다운로드 사이트에서와 같이 일반적인 것이 반대입니다. 첫 번째로 후속 페이지로 이동 한 다음 다운로드가 시작됩니다.

    따라서 사용자를 최종 페이지로 리디렉션하여 (다른 것 중에서) 다음과 같이 말합니다.

    다운로드가 자동으로 시작됩니다. 클릭하지 않으려면 [a href = "create_csv.php"] 여기 [/ a]를 클릭하십시오.

    다운로드를 시작하는 것과 관련하여 (예 : create_csv.php를 자동으로 호출하는 등) 많은 옵션이 있습니다.

  2. ==============================

    2.정말 필요한 경우에는 매우 쉽게 할 수 있습니다.

    정말 필요한 경우에는 매우 쉽게 할 수 있습니다.

    그러나 JavaScript와 쿠키에서 약간의 작업이 필요할 것입니다.

    PHP에서는 쿠키 설정을 추가해야합니다.

    header('Set-Cookie: fileLoading=true'); 
    

    그런 다음 다운로드를 호출하는 페이지에서 JS (예 : 초당 한 번)를 추적해야합니다 (예 : 여기에 플러그인 jQuery 쿠키가 사용됨).

    setInterval(function(){
      if ($.cookie("fileLoading")) {
        // clean the cookie for future downoads
        $.removeCookie("fileLoading");
    
        //redirect
        location.href = "/newpage";
      }
    },1000);
    

    이제 파일이 다운로드되기 시작하면 JS는 쿠키를 인식하고 쿠키가 삭제 된 후 필요한 페이지로 리디렉션합니다.

    물론 쿠키, 자바 스크립트 등을 받아들이려면 브라우저가 필요하다는 것을 알 수 있지만 작동합니다.

  3. ==============================

    3.보내는 헤더는 HTTP 헤더입니다. 브라우저는 이것을 페이지 요청으로 받아 처리합니다. 그리고 귀하의 경우에는 다운로드해야하는 페이지입니다.

    보내는 헤더는 HTTP 헤더입니다. 브라우저는 이것을 페이지 요청으로 받아 처리합니다. 그리고 귀하의 경우에는 다운로드해야하는 페이지입니다.

    그래서 리다이렉트 헤더를 추가하는 것은 파일 다운로드의 모든 과정을 혼란스럽게 만듭니다 (헤더가 수집되어 하나의 헤더로 생성 된 후 브라우저로 보내지기 때문에 여러 개의 리다이렉트 헤더 IIRC를 설정하여이를 시도 할 수 있습니다)

  4. ==============================

    4.그러나 IE 사용자가 다운로드 할 수있는 파일을 자동으로 시작하면 보안 경고 탭이 표시됩니다. daremon에 의해 설명 된 세 가지 방법 모두이 경고를 표시합니다. 당신은 단순히이 문제를 해결할 수 없습니다. 실제 링크를 제공하면 더 나은 서비스가 제공됩니다.

    그러나 IE 사용자가 다운로드 할 수있는 파일을 자동으로 시작하면 보안 경고 탭이 표시됩니다. daremon에 의해 설명 된 세 가지 방법 모두이 경고를 표시합니다. 당신은 단순히이 문제를 해결할 수 없습니다. 실제 링크를 제공하면 더 나은 서비스가 제공됩니다.

  5. ==============================

    5.나는 javascript에 의존하는 이것에 대한 하나의 해결책을 찾았으므로 정확히 안전하지는 않지만 안전하지 않은 중요한 사이트에서는 작동하는 것처럼 보입니다.

    나는 javascript에 의존하는 이것에 대한 하나의 해결책을 찾았으므로 정확히 안전하지는 않지만 안전하지 않은 중요한 사이트에서는 작동하는 것처럼 보입니다.

    '다운로드'라는 제목의 버튼이있는 폼을 다운로드 스크립트를 가리 키도록 설정 한 다음 javascript를 사용하여 다운로드 버튼을 제거하고 화면의 메시징을 대체하는 onsubmit 핸들러에 항목을 입력하십시오. 다운로드가 계속되어 화면이 변경됩니다. 다운로드 스크립트에 문제가있는 경우 분명히 다운로드가 성공하더라도 실패한 것으로 보입니다.하지만 지금 당장하는 것이 가장 좋습니다.

  6. ==============================

    6.파일 내용을 나타내는 매개 변수와 URL을 리디렉션하여 시도 할 수 있습니다. 리디렉션에서 다운로드 할 파일 내용을 출력 할 수 있습니다.

    파일 내용을 나타내는 매개 변수와 URL을 리디렉션하여 시도 할 수 있습니다. 리디렉션에서 다운로드 할 파일 내용을 출력 할 수 있습니다.

  7. ==============================

    7.이것은 꽤 오래된 문제이지만, 여기 JS를 통해 어떻게 그것을 달성했다.

    이것은 꽤 오래된 문제이지만, 여기 JS를 통해 어떻게 그것을 달성했다.

    // Capture the "click" event of the link.
    var link = document.getElementById("the-link");
    link.addEventListener("click", function(evt) {
      // Stop the link from doing what it would normally do.
      evt.preventDefault();
      // Open the file download in a new window. (It should just
      // show a normal file dialog)
      window.open(this.href, "_blank");
      // Then redirect the page you are on to whatever page you
      // want shown once the download has been triggered.
      window.location = "/thank_you.html";
    }, true);
    

    통해 - https://www.daniweb.com/web-development/php/threads/463652/page-not-redirecting-after-sending-headers-in-php

  8. ==============================

    8.다음을 사용하여 CSV 다운로드가 포함 된 PHP 파일을 실행하십시오.

    다음을 사용하여 CSV 다운로드가 포함 된 PHP 파일을 실행하십시오.

    <a onclick="popoutWin(\'csvexport.php\')" >Download CSV File</a>
    

    또는

    <input name="newThread" type="button" value="Download CSV File"
            onclick="popoutWin(\'csvexport.php\')" />
    

    여기서 자바 스크립트 함수 popoutWin은

    /*
     * Popout window that self closes for use with downloads
     */
    function popoutWin(link){
        var popwin = window.open(link);
        window.setTimeout(function(){
            popwin.close();
        }, 500);
    }
    

    그러면 CSV 다운로드 프롬프트를 표시 한 다음 창을 즉시 닫고 프롬프트 만 남기 위해 창을 엽니 다.

  9. ==============================

    9.여기에 대한 답변입니다 : 그것은 작동합니다! 세 가지 코드 부분이 필요합니다. HTML

    여기에 대한 답변입니다 : 그것은 작동합니다! 세 가지 코드 부분이 필요합니다. HTML

    <a id="download_btn" class="btn btn-primary" href="?file=filename&download=1">Download<&/a>
    

    JQuery

    $('#download_btn').click(function(){
        window.location.href = '<?=base_url()?>/?file=<?=$file;?>&download=1';
    }).focusout (function(){
        window.location.href = '<?=base_url()?>';
        return false;
    });
    

    PHP

            if(isset($_GET['download']) && isset($_GET['file'])){
    
                $zip_path = 'path_to/'.$_GET['file'].'.zip';
    
                if(file_exists($zip_path)){
                    header('Content-Type: application/zip');
                    header('Content-Disposition: attachment; filename="'.basename($zip_path).'"');
                    header('Content-Length: ' . filesize($zip_path));
                    header('Location: '.$zip_path);
                }
    
            }
    
  10. ==============================

    10.

    <?php 
        function force_file_download($filepath, $filename = ''){
            if($filename == ''){
                $filename = basename($filepath);
            }
    
            header('Content-Type: application/octet-stream');
            header("Content-Transfer-Encoding: Binary"); 
            header("Content-disposition: attachment; filename=\"" . $filename . "\""); 
            readfile($filepath); // do the double-download-dance (dirty but worky)  
        }
    
        force_file_download('download.txt');
    ?>
    <script type="text/javascript">
        location = 'page2.php'
    </script>
    

    다음은 javascript를 사용하는 솔루션입니다.

  11. from https://stackoverflow.com/questions/822707/php-generate-file-for-download-then-redirect by cc-by-sa and MIT license