PHP buộc tải xuống tệp từ URL

Đôi khi, bạn có thể cần yêu cầu người dùng tải xuống tệp khi họ nhấp vào liên kết trên trang web của bạn mà không cần mở hoặc phát trực tuyến tệp đó trong trình duyệt của họ. Trong bài viết này, chúng ta sẽ xem xét cách buộc tải xuống tệp trong PHP. Điều này hữu ích trong trường hợp tệp của bạn có nhiều tệp âm thanh/video mà người dùng thường phát trực tuyến trên trình duyệt của họ mà không tải xuống, trong trường hợp đó, tải máy chủ của bạn tăng do có quá nhiều kết nối mở

Trên thực tế, bạn không cần sử dụng bất kỳ mã PHP nào để buộc tải xuống tệp. Bạn có thể chỉ cần đặt tiêu đề sắp xếp nội dung và tiêu đề loại nội dung của URL trong. htaccess của máy chủ Apache của bạn. Điều này sẽ buộc Apache gửi các tệp tải xuống. Đây là cách buộc tải xuống trong Apache


Cách buộc tải xuống tệp trong PHP

Dưới đây là các bước để buộc tải xuống tệp trong PHP


1. Tạo tập tin php

Mở terminal và tạo tải xuống. tập tin php. Cái này sẽ có chức năng chính là phục vụ tải file. Chúng tôi đã tạo tệp trong thư mục gốc trang web của chúng tôi /var/www/html. Nếu thư mục gốc trang web của bạn khác, vui lòng cập nhật đường dẫn sau theo yêu cầu của bạn

$ sudo vi /var/www/html/download.php

Chúng ta sẽ sử dụng hàm readfile() để phục vụ việc tải file. Thêm các dòng sau vào tập tin trên. Các tệp của chúng tôi được đặt tại thư mục /var/www/html/downloads/. Nếu các tệp của bạn được đặt ở một vị trí khác, vui lòng cập nhật đường dẫn bên dưới được in đậm theo yêu cầu của bạn

/var/www/html/downloads/" . $file;
   
        // Process download
        if(file_exists($filepath)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'
                                        .basename($filepath).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filepath));
  
            // Flush system output buffer
            flush(); 
            readfile($filepath);
            die();
        } else {
            http_response_code(404);
            die();
        }
    } else {
        die("Download cannot be processed");
    }
}
?>


2. Tạo chỉ mục. html

Tiếp theo, chúng ta sẽ tạo một chỉ mục. tệp html có liên kết để tải xuống tệp. Mở terminal và chạy lệnh sau để tạo chỉ mục. html

$ sudo vi index.html

Thêm các dòng sau vào chỉ mục. tệp html

    Download

'; } ?>

Tệp trên sẽ chỉ tạo hai liên kết neo để tải xuống tệp

Khi bạn nhấp vào một trong các liên kết trong chỉ mục của mình. html, nó sẽ tự động gửi yêu cầu tải xuống. php sẽ bắt đầu tải xuống tệp

Buộc tải xuống tệp rất hữu ích trong trường hợp trang web của bạn chứa nhiều tệp âm thanh/video thường được phát trực tuyến trên mạng. Khi bạn buộc tải xuống, máy chủ của bạn sẽ gửi tệp và đóng kết nối. Nhưng khi người dùng truyền phát tệp, nó sẽ giữ kết nối mở và tăng tải máy chủ một cách không cần thiết

Phương pháp trên rất hữu ích nếu bạn muốn buộc người dùng tải xuống nhưng không muốn các bản tải xuống có thể truy cập công khai

Tuy nhiên, như đã đề cập trước đó, bạn cũng có thể buộc tải xuống trong Apache mà không cần bất kỳ mã hóa PHP nào. Bạn cũng có thể đặt các tệp này trong một URL có thể truy cập công khai để việc nhấp vào chúng sẽ tự động bắt đầu tải xuống trong trình duyệt

Tóm lược. trong hướng dẫn này, bạn sẽ học cách tải xuống một tệp trong PHP bằng cách sử dụng hàm readfile()

Giới thiệu về hàm readfile() trong PHP

Hàm readfile() đọc dữ liệu từ một tệp và ghi nó vào bộ đệm đầu ra

Đây là cú pháp của hàm readfile()

readfile ( string $filename , bool $use_include_path = false , resource $context = ? ) : int|false

Code language: PHP (php)

Hàm readfile() có các tham số sau

  • $filename là đường dẫn đến tệp
  • $use_include_path nếu được đặt thành true, hàm sẽ tìm kiếm tệp trong đường dẫn bao gồm
  • $filename = 'readme.pdf'; if (file_exists($filename)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filename)); readfile($filename); exit; }

    Code language: HTML, XML (xml)
    0 chỉ định ngữ cảnh luồng

Hàm readfile() trả về số byte nếu nó đọc thành công dữ liệu từ tệp hoặc

$filename = 'readme.pdf'; if (file_exists($filename)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filename)); readfile($filename); exit; }

Code language: HTML, XML (xml)
2 nếu nó không đọc được

Ví dụ về tệp tải xuống PHP

Ví dụ sau đây cho biết cách tải xuống tệp

$filename = 'readme.pdf'; if (file_exists($filename)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($filename)); readfile($filename); exit; }

Code language: HTML, XML (xml)
3 bằng cách sử dụng ví dụ về hàm readfile()

Làm cách nào để buộc tải xuống tệp trong PHP?

Buộc tải xuống tệp bằng PHP. Chúng tôi sẽ sử dụng PHP ở đây làm ngôn ngữ kịch bản phía máy chủ. Trong PHP, điều này có thể được thực hiện bằng cách sử dụng hàm readfile() . Chức năng chính của readfile() là xuất ra một tập tin. Khi nhấp vào bất kỳ siêu liên kết nào, tệp tương ứng sẽ được trình duyệt tải xuống như được hiển thị.

Làm cách nào để tải xuống tệp từ URL PHP?

Các bước để tải tệp xuống. .
Khởi tạo URL tệp cho biến
Tạo phiên cURL
Khai báo một biến và lưu tên thư mục lưu file tải về
Sử dụng hàm basename() để trả về tên cơ sở tệp nếu đường dẫn tệp được cung cấp dưới dạng tham số
Lưu tệp vào vị trí đã cho

Làm cách nào để buộc tải xuống tệp từ máy chủ từ xa trong PHP?

Bạn có thể tải xuống bất kỳ loại tệp nào (hình ảnh, ZIP, video, âm thanh, v.v.) từ máy chủ từ xa bằng PHP. Sử dụng hàm readfile() với tiêu đề Loại nội dung application/x-file-to-save, để tải xuống tệp ZIP từ URL từ xa bằng PHP. header("Kiểu nội dung. application/x-file-to-save");

Làm cách nào để tải xuống tệp zip từ URL trong PHP?

giải nén. php .
tải tệp này vào thư mục bạn muốn trích xuất nội dung của tệp đã tải xuống. tập tin nén
chạy tập lệnh trong trình duyệt của bạn. tôi. e. http. // localhost/giải nén. php
sau khi tập lệnh được thực thi thành công, hãy đăng nhập qua ftp và xóa tập lệnh này