Hướng dẫn php force download pdf - Tải xuống lực lượng php pdf

Tôi đã cố gắng buộc tải xuống các tệp PDF trong trình duyệt, tôi đã thành công trong việc này và các tệp đang được tải xuống. Nhưng khi tôi mở các tệp PDF đã tải xuống, chúng không hiển thị đúng, một cái gì đó như được giải mã hoặc không thể nhìn thấy các phông chữ và hình ảnh đúng cách thay vì hiển thị một số văn bản và biểu tượng kỳ lạ. Đây là mã tôi đang sử dụng để tải xuống tệp:

 //Here I am getting the complete path to pdf file
 $file_url  = stripslashes( trim( $theFile ) );
 //get filename
 $file_name = basename( $theFile );
 //get fileextension    
 $file_extension = pathinfo($file_name);
 //security check
 $fileName = strtolower($file_url);

 //var_dump($file_url, $file_name, $file_extension); die();
 //var_dump($file_name); die();

 $file_new_name = $file_name;


 header("Expires: 0");
 header("Cache-Control: no-cache, no-store, must-revalidate");
 header('Cache-Control: pre-check=0, post-check=0, max-age=0', false);
 header("Pragma: no-cache");
 header("Content-type: application/pdf");
 header("Content-Disposition:attachment; filename={$file_new_name}");
 header("Content-Type: application/force-download");

 readfile("{$file_url}");

 exit();

Có điều gì tôi muốn thêm vào mã này để khắc phục sự cố không?

Hướng dẫn php force download pdf - Tải xuống lực lượng php pdf

Machavity ♦

30.2k26 Huy hiệu vàng88 Huy hiệu bạc99 Huy hiệu đồng26 gold badges88 silver badges99 bronze badges

hỏi ngày 25 tháng 3 năm 2020 lúc 5:27Mar 25, 2020 at 5:27

Hướng dẫn php force download pdf - Tải xuống lực lượng php pdf

1

Theo dõi tài liệu PHP,

Note:
readfile() will not present any memory issues, even when sending large files, on its own.
If you encounter an out of memory error ensure that output buffering is off with ob_get_level().

Và liên kết này php readfile () gây ra các bản tải xuống tệp bị hỏng, xóa tất cả các không gian trước thẻ PHP mở (<?php) trên dòng đầu tiên.

Nói tóm lại, không gian sẽ làm hỏng tệp nhị phân của bạn.spaces will corrupt your binary file.

<?php
...
// clean all levels of output buffer
while (ob_get_level()) {
    ob_end_clean();
}
readfile("{$file_url}");

exit();

Đã trả lời ngày 25 tháng 3 năm 2020 lúc 6:30Mar 25, 2020 at 6:30

Rangerzrangerzrangerz

5753 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

0

Đây là một hướng dẫn ngắn về cách buộc một tệp PDF để tải xuống bằng PHP. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách buộc trình duyệt tải xuống tệp PDF dưới dạng tệp đính kèm thay vì hiển thị trực tiếp.

Hãy xem tập lệnh PHP sau:

//The full or relative path to your PDF file.
$pdfFile = 'instructions.pdf';

//Set the Content-Type to application/pdf
header('Content-Type: application/pdf');

//Set the Content-Length header.
header('Content-Length: ' . filesize($pdfFile));

//Set the Content-Transfer-Encoding to "Binary"
header('Content-Transfer-Encoding: Binary');

//The filename that it should download as.
$downloadName = 'instructions.pdf';

//Set the Content-Disposition to attachment and specify
//the name of the file.
header('Content-Disposition: attachment; filename=' . $downloadName);

//Read the PDF file data and exit the script.
readfile($pdfFile);
exit;

Trong mã trên:

  • Chúng tôi đã tham khảo đường dẫn đến tệp PDF mà chúng tôi muốn tải xuống. Trong trường hợp này, tệp trong câu hỏi là & nbsp; hướng dẫn.pdf và nó nằm trong cùng thư mục với tập lệnh PHP của chúng tôi. Điều quan trọng cần lưu ý là bạn cũng có thể sử dụng đường dẫn đầy đủ đến PDF của mình nếu tệp được đặt trong một thư mục khác.instructions.pdf and it is located in the same directory as our PHP script. It is important to note that you can also use a full path to your PDF if the file is located in another directory.
  • Chúng tôi đã sử dụng chức năng tiêu đề PHP, để đặt phản hồi loại nội dung cho ứng dụng/pdf. Tiêu đề này cho biết trình duyệt loại dữ liệu mà nó nên mong đợi.header function to set the Content-Type response to “application/pdf“. This header tells the browser what type of data it should expect.
  • Tiêu đề mã hóa chuyển đổi nội dung đã được đặt thành nhị phân vì chúng tôi muốn chuyển tệp ở định dạng nhị phân tự nhiên.
  • Chúng tôi đã chỉ định tên tệp nào nên được sử dụng khi tệp được tải xuống. Đây là tên sẽ được hiển thị khi người dùng được nhắc tải xuống tệp. Lưu ý rằng đây không phải là cùng tên với tên tệp gốc. Ví dụ: bạn có thể thêm ngày hiện tại vào tên tệp nếu điều đó có ý nghĩa.
  • Sử dụng chức năng tệp PHP, chúng tôi có thể tính toán kích thước của tệp trong byte và đặt đó là tiêu đề độ dài nội dung.Content-Length header.
  • Tiêu đề xử lý nội dung đã được đặt thành tệp đính kèm. Do đó, trình duyệt của máy khách bây giờ sẽ biết rằng nó sẽ coi dữ liệu dưới dạng tải xuống tệp.Content-Disposition header was set to “attachment”. As a result, the client’s browser will now know that it should treat the data as a file download.
  • Cuối cùng, chúng tôi đã xuất dữ liệu của tệp PDF của chúng tôi bằng cách sử dụng hàm readfile PHP.readfile function.

Đó là nó! Khá đơn giản, phải không?