다운로드 송장을 제공하고 싶습니다. 현재 간단한 번호 매기기 체계 (invoice-01.pdf, invoice-02.pdf 등)를 사용하고 있습니다. 데이터를 가리기 위해 해시를 대신 사용할 수 있다는 것을 알고 있습니다.
또한 사용자가 직접 PHP를 사용하지 않도록하여 PHP를 사용하고 송장을 제공 할 수 있습니까?
답변
php.net 에 이것의 예조차 있습니다
<?php
// We'll be outputting a PDF
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');
?>
아니면
<?php
if ( can_this_file_be_downloaded() ) {
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="invoice.pdf"');
readfile("{$_GET['filename']}.pdf");
} else {
die("None shall pass");
}
?>
답변
샘이 답이 있습니다. 또한 .htaccess가있는 디렉토리에 넣으십시오.
Authname Private
AuthType basic
require user noadmittance
URL을 알고 있으면 직접 액세스 할 수 없습니다. readfile ()을 사용하여 PHP 스크립트에서 계속 읽을 수 있습니다.
답변
이 훌륭한 안내서를 찾았습니다 : PHP를 통해 큰 파일을 제공하는 방법 .
lighttpd 트릭이 특히 유용합니다. PHP가 lighhtpd에서 실행되는 경우 스크립트는 “X-Sendfile”헤더 만 설정하면되고 lighttpd는 파일을 읽고 전송합니다 (파일 전송 방법도 잘 알고 있습니다).
최신 정보:
Lighttpd에는이 기능이 있으며 Apache2 용 mod_xsendfile이 있습니다.
( NginX 문서 에서 인용 )
답변
자동 MIME 유형 감지 기능 :
function serve_file($filepath, $new_filename=null) {
$filename = basename($filepath);
if (!$new_filename) {
$new_filename = $filename;
}
$mime_type = mime_content_type($filepath);
header('Content-type: '.$mime_type);
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile($filepath);
}
사용법 :
serve_file("/no_apache/invoice27342.pdf");
PHP로 다른 것을 보내지 않도록주의하십시오 (에코 없음).