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

Đô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ập lệnh buộc tải xuống có thể cung cấp cho bạn nhiều quyền kiểm soát hơn đối với việc tải xuống tệp so với việc bạn cung cấp liên kết trực tiếp có thể là điều tốt trong phần lớn thời gian để đọc trực tuyến. Nhưng đôi khi có thể rất khó chịu khi nhấp vào liên kết đến tài liệu mà bạn muốn mọi người đọc, sau đó phải đợi tải xuống và cuối cùng mở trên máy tính của bạn mà có thể không có chương trình phù hợp để mở.

Nhưng nếu bạn có một tệp và bạn muốn mọi người tải xuống tệp đó với tùy chọn lưu dưới dạng thì sao?

PHP cho phép bạn thay đổi tiêu đề HTTP của tệp mà bạn đang viết, để bạn có thể buộc tải xuống tệp thay vì hiển thị nội dung trên trình duyệt mà thông thường trình duyệt sẽ tải trong cùng một cửa sổ

Điều này hoàn hảo cho các tệp như PDF, tệp tài liệu, hình ảnh và video mà bạn muốn khách hàng của mình tải xuống thay vì đọc trực tuyến

điều kiện tiên quyết

PHP7. 4. 3, Máy chủ Apace http 2. 4

thư mục dự án

Giả định rằng bạn đã thiết lập Apache và PHP trong hệ thống Windows

Bây giờ chúng ta sẽ tạo một thư mục gốc của dự án có tên php-force-download-file trong thư mục htdocs của máy chủ Apache

Tôi có thể không đề cập đến thư mục gốc của dự án trong các phần tiếp theo và tôi sẽ cho rằng tôi đang nói về thư mục gốc của dự án

Tập lệnh tải xuống tệp

Tạo điểm chung. tệp php với mã nguồn bên dưới

Bạn có thể xem hướng dẫn Cách lấy loại tệp mime bằng PHP để biết loại tệp mime

Ở đây tôi đang tải xuống tệp từ thư mục gốc của dự án nhưng lý tưởng nhất là bạn nên có một số loại đường dẫn tải xuống cho tệp, có thể đó là một dịch vụ bên ngoài hoặc vị trí thực của đĩa hoặc bảng cơ sở dữ liệu, v.v.

Nút tải xuống

Tạo một trang web PHP php-force-download-file. php với mã nguồn sau. CNTT hiển thị nút tải xuống cho người dùng cuối và họ cần nhấp vào nút đó để tải xuống tệp. Ở đây tôi sẽ tải xuống tệp pclzip. lib. php được lưu trong thư mục gốc của dự án




    
        
        
    
    
        

Force Download File

Kiểm tra ứng dụng

Vậy là chúng ta đã hoàn thành phần mã hóa, bây giờ hãy thử nghiệm ứng dụng của chúng ta

Bạn có thể nhấn vào URL http. // localhost/php-force-download-file/php-force-download-file. php trong trình duyệt

Nhấp vào nút Tải xuống sẽ cung cấp cho bạn tệp được mở trong cửa sổ mới cho các tùy chọn “Mở bằng” hoặc “Lưu”

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 từ đường dẫn tệp trong PHP?

Hàm readfile() được sử dụng trong tập lệnh PHP để buộc tải xuống bất kỳ tệp nào ở vị trí hiện tại hoặc tệp có đường dẫn tệp.

Làm cách nào để tải xuống tệp từ cơ sở dữ liệu trong PHP?

php $name= $_GET['nama']; . Chuyển tập tin'); . ứng dụng/octet-stream'); . tập tin đính kèm;

Làm cách nào để tạo nút tải xuống trong PHP?

Ý tưởng là tạo một nút tải xuống sẽ chuyển hướng bạn đến một trang khác bằng tập lệnh PHP sẽ tự động bắt đầu tải xuống. .
Tạo nút tải xuống
đầu ra
đầu ra
Mã PHP để tải xuống. Khi người dùng nhấp vào nút trên, mã sẽ được chuyển hướng đến phần “downloadFile. tập tin php”