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

Nếu bạn muốn tạo các loại tệp hoặc hình ảnh khác nhau, tải tệp trực tiếp vào ổ đĩa của người dùng bằng PHP, bạn có thể chạy hàm readfile()

Hãy xem cách thực hiện trong ví dụ tạo thư viện hình ảnh, điều này sẽ giúp người dùng tải xuống các tệp hình ảnh chỉ bằng một cú nhấp chuột

Trong ví dụ dưới đây, một bộ sưu tập hình ảnh. php được tạo và một mã được đặt bên trong nó

Vì vậy, trong ví dụ trên, liên kết tải xuống trỏ đến tệp tải xuống. tập tin php. Đến lượt nó, URL bao gồm tên tệp hình ảnh, giống như một chuỗi truy vấn. Ngoài ra, bạn có thể nhận thấy rằng hàm urlencode() được áp dụng để mã hóa tên tệp hình ảnh theo cách mà chúng có thể được chuyển một cách an toàn giống như một tham số URL. Lý do là tên tệp có thể bao gồm các ký tự URL không an toàn. Toàn bộ mã tải xuống. php, buộc tải xuống hình ảnh trông như sau

Các định dạng tệp khác như pdf, doc, v.v. cũng có thể được tải xuống theo cách đã trình bày ở trên

Điều quan trọng cần lưu ý là trong ví dụ trên, biểu thức chính quy (dòng 8) không cho phép các tệp có tên bắt đầu hoặc kết thúc bằng dấu chấm (. ). Ví dụ: bạn có thể sử dụng tên tệp như sách. jpg hoặc Sách. jpg nhưng không thể sử dụng sách. jpg. ,. diều. jpg, v.v.

Trong ứng dụng web, nói chung, tệp được tải xuống từ cùng một máy chủ. Nhưng đôi khi tệp cần được tải xuống từ máy chủ từ xa. Để tải xuống tệp bằng PHP, bạn cần buộc trình duyệt tải xuống tệp. Buộc tải xuống trong PHP giúp tải xuống các tệp từ máy chủ và lưu chúng vào ổ đĩa cục bộ

Trong đoạn mã ví dụ, chúng tôi sẽ chỉ cho bạn cách buộc tải xuống tệp từ URL 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 đề Kiểu nội dung application/x-file-to-save để tải xuống tệp ZIP từ URL từ xa bằng PHP

// Remote download URL
$remoteURL = 'https://www.example.com/files/project.zip';

// Force download
header("Content-type: application/x-file-to-save");
header("Content-Disposition: attachment; filename=".basename($remoteURL));
ob_end_clean();
readfile($remoteURL);
exit;

Lưu ý rằng. Hàm ob_end_clean() sẽ giúp tải xuống một tệp lớn từ máy chủ từ xa trong PHP

Trước đây đã đề cập rằng các tệp zip và exe tự động tải xuống mà không cần sử dụng tập lệnh PHP. Đầu tiên, tạo một tệp HTML với đoạn mã sau. Ở đây, bốn phần tử neo được xác định để tải xuống bốn loại tệp. Các loại tệp này bao gồm tệp TEXT, ZIP, PDF và JPG

Tải xuống. html

< html >
< đầu>
<title>Download Files</title>
</head>
<body>
<p><a href="abc.txt" > Tải xuống tệp TEXT < /a></p>
<p><a href="horizon.zip" > Tải xuống tệp ZIP < /a></p>
<p><a href="lecture.pdf" > Tải xuống tệp PDF < /a></p>
<p><a href="rose.jpg" > Tải xuống tệp JPG < /a></p>
</body>
</html>

Đầu ra
Hộp thoại sau sẽ xuất hiện để tải xuống tệp sau khi nhấp vào liên kết tệp zip. Sau đó, người dùng có thể tải xuống tệp hoặc mở tệp trong trình quản lý lưu trữ.

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

Nếu bạn nhấp vào tệp hình ảnh, hình ảnh sẽ tự động được mở trong trình duyệt, như thể hiện trong đầu ra sau. Bạn phải lưu tệp để tạo một bản sao của tệp hình ảnh trong ổ đĩa cục bộ. Tương tự, khi click vào link file PDF, TEXT, nội dung file sẽ được mở trên trình duyệt mà không cần download file. Giải pháp cho vấn đề này là buộc phải tải xuống tệp bằng cách sử dụng hàm readfile() tích hợp trong PHP

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

Tải xuống tệp bằng hàm readfile()

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. Cú pháp của chức năng này được đưa ra dưới đây

Cú pháp
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )

Hàm này có thể nhận ba đối số. Đối số đầu tiên là bắt buộc và hai đối số còn lại là tùy chọn. Đối số đầu tiên, $filename, lưu trữ tên tệp hoặc tên tệp với đường dẫn sẽ tải xuống. Giá trị mặc định của tham số thứ hai, $use_include_path, là sai và sẽ được đặt thành đúng nếu tên tệp có đường dẫn được sử dụng trong đối số đầu tiên. Đối số thứ ba, $context, được sử dụng để biểu thị tài nguyên luồng ngữ cảnh. Hàm này trả về số byte đã đọc từ tệp được đề cập trong đối số đầu tiên. Việc sử dụng chức năng này được hiển thị trong hai ví dụ sau

ví dụ 1. Tải xuống tệp có tên tệp

Trong ví dụ này, chúng tôi sẽ tạo một tệp HTML với mã sau, trong đó tên tệp sẽ được chuyển dưới dạng tham số của đường dẫn có tên URL và giá trị của tham số này sẽ được chuyển đến tệp PHP có tên tải xuống. php

tải về2. html

< html >
< đầu>
<title>Download Files</title>
</head>
<body>
<p><a href="download.php?path=abc.txt" >Tải xuống TEXT tệp< /a></p>
<p><a href="download.php?path=horizon.zip" >Tải xuống tệp ZIP< /a >< /p>
<p><a href="download.php?path=lecture.pdf" >Tải xuống tệp PDF< /a >< /p>
<p><a href="download.php?path=rose.jpg" >Tải xuống tệp JPG< /a >< /p>
</body>
</html>

Chúng tôi sẽ tạo tệp PHP với mã sau đây để tải xuống tệp cưỡng bức. Ở đây, hàm isset() được sử dụng để kiểm tra xem $_GET[‘path’] có được xác định hay không. Nếu biến được xác định, hàm file_exists() được sử dụng để kiểm tra xem tệp có tồn tại trong máy chủ không. Tiếp theo, hàm header() dùng để thiết lập các thông tin header cần thiết trước khi sử dụng hàm readfile(). Hàm basename() được sử dụng để truy xuất tên tệp và hàm filesize() được sử dụng để đọc kích thước của tệp theo byte, sẽ được hiển thị trong hộp thoại mở để tải xuống tệp. Hàm flush() được sử dụng để xóa bộ đệm đầu ra. Hàm readfile() chỉ được sử dụng với tên tệp, tại đây

Tải xuống. php

if(isset();tiêu đề();tiêu đề( . không có bộ đệm, phải xác thực lại");tiêu đề();tiêu đề(tên cơ sở($filename). '"');tiêu đề. kích thước tệp($filename) . public');//Xóa bộ đệm đầu ra của hệ thốngxóa;}}khác . "?>

if(isset($_GET['path']))
{
//Read the filename
$filename = $_GET['path'];
//Check the file exists or not
if(file_exists($filename)) {

//Define header information
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Length: ' . filesize($filename));
header('Pragma: public');

//Clear system output buffer
flush();

//Read the size of the file
readfile($filename);

//Terminate from the script
die();
}
else{
echo "File does not exist.";
}
}
else
echo "Filename is not defined."
?>

Đầu ra
Đầu ra sau sẽ xuất hiện sau khi nhấp vào liên kết tải xuống của tệp hình ảnh. Kích thước tệp của hoa hồng. hình ảnh jpg là 27. 2 KB, như minh họa trong hộp thoại. Bạn có thể tải xuống tệp bằng cách chọn nút radio Lưu tệp và nhấn nút OK.

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

ví dụ 2. Tải xuống tệp có đường dẫn tệp

Nếu tệp tồn tại ở vị trí tệp nhất định, đường dẫn tệp sẽ được yêu cầu đề cập trong URL. Trong ví dụ này, chúng tôi sẽ tạo một tệp HTML với mã sau, mã này sẽ chuyển tên tệp bằng đường dẫn tệp

tải3. html

< html >
< đầu>
<title>Download Files</title>
</head>
<body>
<p><a href="download.php?path=downloads/lecture.pdf" > Tải xuống tệp PDF < /a></p>
<p><a href="download2.php?path=downloads/rose.jpg" > Tải xuống tệp JPG < /a></p>
</body>
</html>

Chúng tôi sẽ tạo một tệp PHP với mã sau để tải xuống tệp từ đường dẫn tệp. Mã PHP trong ví dụ trước sẽ được sửa đổi một chút để tải xuống tệp từ đường dẫn đã cho. Hàm clearstatecache() được sử dụng để xóa bộ nhớ cache đã được lưu trữ trước đó. Hai đối số được sử dụng trong hàm readfile()

tải về2. php

if(isset();tiêu đề();tiêu đề( . tập tin đính kèm; . tên cơ sở($url). '"');tiêu đề. kích thước tệp($url) . public');//Xóa bộ đệm đầu ra của hệ thốngxóa;}}tiếng vọng . "?>
if(isset($_GET['path']))
{
//Read the url
$url = $_GET['path'];

//Clear the cache
clearstatcache();

//Check the file path exists or not
if(file_exists($url)) {

//Define header information
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($url).'"');
header('Content-Length: ' . filesize($url));
header('Pragma: public');

//Clear system output buffer
flush();

//Read the size of the file
readfile($url,true);

//Terminate from the script
die();
}
else{
echo "File path does not exist.";
}
}
echo "File path is not defined."

?>

Đầu ra
Sau khi nhấp vào liên kết tải xuống của tệp PDF, đầu ra sau sẽ xuất hiện.

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

Video hướng dẫn

Phần kết luận

Bài viết này cung cấp một cách đơn giản để buộc tải xuống bất kỳ tệp nào bằng tập lệnh PHP, để giúp người đọc thêm tính năng tải xuống trong tập lệnh của họ

Làm cách nào để tải xuống tệp từ máy chủ bằng 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 một tệp tải xuống trong PHP?

Buộc tải tệp xuống 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 thế nào Buộc tải xuống tệp từ máy chủ từ xa 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 để lưu tệp trong PHP?

Mã PHP. lưu tệp bằng fopen / fwrite . txt'; . "); fwrite($fp, $data) or die("Không thể ghi giá trị vào tệp. "); fclose($fp); echo "Đã lưu vào $file thành công. "; ?>