07/09/2018, 10:37

Code Download Một Trang Web trong PHP

Để tải một trang web (bao gồm download một file từ URL) trong PHP chúng ta có một số cách khác nhau tuy nhiên cách đơn giản và thuận tiện nhất đó là sử dụng đồng thời 2 hàm fopen() và file_put_contents(). Lưu ý: Để sử dụng hàm fopen() thì bạn cần cho phép PHP có quyền tải nội dung từ một ...

Để tải một trang web (bao gồm download một file từ URL) trong PHP chúng ta có một số cách khác nhau tuy nhiên cách đơn giản và thuận tiện nhất đó là sử dụng đồng thời 2 hàm fopen() và file_put_contents().

Code Download Một Trang Web trong PHP

Lưu ý: Để sử dụng hàm fopen() thì bạn cần cho phép PHP có quyền tải nội dung từ một URL bằng cách thiết lập allow_fopen_url On. Một số web server theo dạng share hosting tắt chức năng này do đó bạn có thể gặp phải lỗi khi sử dụng hàm fopen().

Ở trong đoạn code ví dụ dưới đây, chúng ta sẽ tải về 1 tập tin từ địa chỉ http://example.net/test_file.zip rồi sau đó lưu trên máy với tên download.zip:

<?php
file_put_contents("download.zip", fopen("http://example.net/test_file.zip", "r"));
?>

Chúng ta cũng có thể quy định một đường dẫn tuyệt đối cho tập tin download.zip:

<?php
file_put_contents("/tmp/download.zip", fopen("http://example.net/test_file.zip", "r"));
?>

Khi sử dụng cách trên với PHP phiên bản 5.1.0 trở lên thì dữ liệu sẽ được đọc theo từng phần trong hàm fopen() và đồng thời dữ liệu tải về này cũng sẽ được lưu trên máy theo từng phần với hàm file_put_contents(), Điều này sẽ đảm bảo hệ thống không bị lỗi tràn bộ nhớ khi tập tin tải về có kích thước lớn.

Một cách khác đó là sử dụng file_put_contents() kết hợp với file_get_contents() như sau:

<?php
file_put_contents("download.zip", file_get_contents("http://example.net/test_file.zip"));
?>

Tuy nhiên với cách trên khi tập tin tải về có kích thước lớn thì hệ thống có nhiều khả năng sẽ bị tràn bộ nhớ vì hàm file_get_contents() sẽ lưu trừ tạm thời toàn bộ dữ liệu được tải về vào bộ nhớ RAM.

0