pdf 파일 다운로드를 위한 PHP 헤더 수정
사용자가 링크를 클릭했을 때 응용 프로그램이 PDF를 열도록 하는 데 어려움을 겪고 있습니다.
지금까지 앵커 태그는 다음과 같은 헤더를 송신하는 페이지로 리다이렉트 됩니다.
$filename='./pdf/jobs/pdffile.pdf;
$url_download = BASE_URL . RELATIVE_PATH . $filename;
header("Content-type:application/pdf");
header("Content-Disposition:inline;filename='$filename");
readfile("downloaded.pdf");
이것은 효과가 없는 것 같습니다만, 과거에 이 문제를 해결한 사람이 있습니까?
w3schools의 예 2는 여러분이 달성하려고 하는 것을 보여줍니다.
<?php header("Content-type:application/pdf"); // It will be called downloaded.pdf header("Content-Disposition:attachment;filename='downloaded.pdf'"); // The PDF source is in original.pdf readfile("original.pdf"); ?>
그리고 기억하세요.
실제 출력이 전송되기 전에 header()를 호출해야 한다는 점에 유의하십시오(PHP 4 이후에는 출력 버퍼링을 사용하여 이 문제를 해결할 수 있습니다).
$name = 'file.pdf';
//file_get_contents is standard function
$content = file_get_contents($name);
header('Content-Type: application/pdf');
header('Content-Length: '.strlen( $content ));
header('Content-disposition: inline; filename="' . $name . '"');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
echo $content;
당신의 코드에 고려해야 할 사항이 몇 가지 있습니다.
먼저, 그 머리글을 정확하게 쓰세요.송신하는 서버는 표시되지 않습니다.Content-type:application/pdf
헤더는 다음과 같습니다.Content-Type: application/pdf
, 띄어쓰기로, 첫 글자를 대문자로 쓴다.
의 파일명Content-Disposition
파일 이름뿐이며, 파일로의 전체 경로가 아닙니다.필수인지 아닌지는 모르겠지만, 이 이름은 항상 로 둘러싸여 있습니다."
것은 아니다.'
그리고 당신의 마지막'
가 없습니다.
Content-Disposition: inline
는 파일을 다운로드가 아닌 표시해야 함을 나타냅니다.사용하다attachment
대신.
또한 파일 확장자를 대문자로 입력하여 일부 모바일 디바이스와 호환되도록 합니다.(갱신: Blackberry만 이 문제가 발생했지만 세상은 이미 이러한 문제에서 벗어났기 때문에 더 이상 걱정할 필요가 없습니다.
어쨌든 코드는 다음과 같이 되어 있습니다.코드는 다음과 같습니다.
<?php
$filename = './pdf/jobs/pdffile.pdf';
$fileinfo = pathinfo($filename);
$sendname = $fileinfo['filename'] . '.' . strtoupper($fileinfo['extension']);
header('Content-Type: application/pdf');
header("Content-Disposition: attachment; filename=\"$sendname\"");
header('Content-Length: ' . filesize($filename));
readfile($filename);
엄밀히 말하면Content-Length
는 옵션이지만 사용자가 다운로드 진행 상황을 추적하고 다운로드가 종료되기 전에 중단되었는지 여부를 검출할 수 있도록 하는 것이 중요합니다.사용할 때는 파일 데이터와 함께 아무것도 보내지 않도록 해야 합니다.그 전에 아무것도 없는 것을 확인해 주세요.<?php
또는 그 후?>
빈 줄도 없습니다.
최근에도 같은 문제가 있었습니다.이것이 도움이 되었습니다.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="FILENAME"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize("PATH/TO/FILE"));
ob_clean();
flush();
readfile(PATH/TO/FILE);
exit();
나는 여기서 이 답을 찾았다.
이거 한번 먹어볼래?readfile
전체 파일 경로가 필요합니다.
$filename='/pdf/jobs/pdffile.pdf';
$url_download = BASE_URL . RELATIVE_PATH . $filename;
//header("Content-type:application/pdf");
header("Content-type: application/octet-stream");
header("Content-Disposition:inline;filename='".basename($filename)."'");
header('Content-Length: ' . filesize($filename));
header("Cache-control: private"); //use this to open files directly
readfile($filename);
파일 크기를 정의해야 합니다...
header('Content-Length: ' . filesize($file));
그리고 이 행은 틀렸습니다.
헤더("Content-Disposition:inline;filename='$filename");
할당량을 망쳤어요.
header("Content-type:application/pdf");
// It will be called downloaded.pdf thats mean define file name would be show
header("Content-Disposition:attachment;filename= $fileName ");
// The PDF source is in original.pdf
readfile($file_url);
언급URL : https://stackoverflow.com/questions/20080341/correct-php-headers-for-pdf-file-download
'source' 카테고리의 다른 글
테이블에서 모두 삭제 (0) | 2022.10.27 |
---|---|
ValueError: 기본이 10인 int()의 리터럴이 잘못되었습니다. (0) | 2022.10.27 |
사전에서 임의의 값을 얻는 방법 (0) | 2022.10.26 |
열에 있는 각 개별 값의 카운트를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.26 |
HTTP 프로토콜의 PUT 및 DELETE 및 PHP에서의 사용 (0) | 2022.10.26 |