Отдача файлов на скачивание PHP
В PHP отправка файла в браузер на скачивание осуществляется в 2 этапа:
Отправка заголовков
Первый вариант с явным указанием типа файла mime:
Второй, application/octet-stream – «двоичный файл без указания формата».
Заголовок с размером файла – header('Content-Length: ' . filesize($file)); можно не указывать.
Чтение и вывод файла
Перед отправкой файла нужно убедится что буферизация вывода отключена с помощью ob_get_level() или сбросить и отключить ее функцией ob_end_clean() .
How to download file from URL using PHP
Building PHP applications will require file interaction a lot, one of them is download file from URL using PHP. This article will guide you the very basic methods of using PHP for downloading file from an URL.
To download file from URL using PHP
There are two general methods to download file from URL using PHP:
1. Using PHP file_get_contents() and file_put_contents() function:
This method can only be used if the web hosting allows the file_get_contents function to run. A lot of the web hosting turns off this function for security reasons , so you should check if the function is enabled before using this method.
After successfully getting the file, file_put_contents will be used to actually save the file into a location.
If the message tells that the download is successful, the file will be store on the save path we defined.
2. Using PHP CURL and fopen()
The CURL method is more widely used, and we recommend you to use PHP CURL for downloading files from URLs instead of using file_get_contents function.
CURL provides more compatibility, more controls over the downloading process and helps you to get familiar with using CURL in PHP, which will be crucial for many other network-related tasks in PHP. Also, working with fopen will be more convenient later with file interaction tasks.
To download file from URL using PHP with CURL and fopen :
If no error displays after running the codes, the file will be stored at the defined $savePath location.
Final thoughts
The tutorial is now over. Hopefully it is helpful for you to understand the basic knowledge to download file from URL using PHP with file_get_contents and CURL.
How to Download a File in PHP
It was previously mentioned that zip and exe files download automatically, without using PHP script. First, create an HTML file with the following code. Here, the four anchor elements are defined to download the four types of files. These file types include TEXT, ZIP, PDF, and JPG files.
Download.html
Output
The following dialog box will appear to download the file after clicking the zip file link. The user can then download the file or open the file in the archive manager.
If you click on the image file, the image will be opened automatically in the browser, as shown in the following output. You must save the file to make a copy of the image file in the local drive. In the same way, when you click on PDF and TEXT file links, the content of the file will be opened in the browser without downloading the file. The solution to this problem is to download the file forcibly using the built-in PHP readfile() function.
Download File Using readfile() Function
The readfile() function is used in PHP script to forcibly download any file of the current location, or the file with the file path. The syntax of this function is given below.
Syntax
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
This function can take three arguments. The first argument is mandatory, and the other two arguments are optional. The first argument, $filename, stores the filename or filename with the path that will download. The default value of the second parameter, $use_include_path, is false and will be set to true if the filename with the path is used in the first argument. The third argument, $context, is used to indicate the context stream resource. This function returns the number of bytes read from the file mentioned in the first argument. The uses of this function are shown in the following two examples.
Example 1: Download File with Filename
In this example, we will create an HTML file with the following code, where the file name will be passed as a parameter of the URL named path, and the value of this parameter will be passed to the PHP file named download.php.
download2.html
We will create the PHP file with the following code to download the file forcibly. Here, the isset() function is used to check whether the $_GET[‘path’] is defined. If the variable is defined, the file_exists() function is used to check whether the file exists in the server. Next, the header() function is used to set the necessary header information before using the readfile() function. The basename() function is used to retrieve the filename, and the filesize() function is used to read the size of the file in bytes, which will be shown in the opening dialog box to download the file. The flush() function is used to clear the output buffer. The readfile() function is used with the filename only, here.
download.php
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’ ) ;
//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."
?>
Output
The following output will appear after clicking the download link of the image file. The file size of the rose.jpg image is 27.2 KB, as shown in the dialog box. You can download the file by selecting the Save File radio button and pressing the OK button.
Example 2: Download File with File Path
If the file exists at the given file location, the file path will be required to mention in the URL. In this example, we will create an HTML file with the following code, which will pass the filename with the file path:
download3.html
We will create a PHP file with the following code to download a file from the file path. The PHP code in the previous example will be slightly modified to download the file from the given path. The clearstatecache() function is used to clear the cache that was previously stored. Two arguments are used in the readfile() function.
download2.php
//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’ ) ;
//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."
Output
After the download link of the PDF file is clicked, the following output will appear.
Video Tutorial
Conclusion
This article provided a simple way to forcibly download any file using the PHP script, to help readers to add the download feature in their script.
About the author
Fahmida Yesmin
I am a trainer of web programming courses. I like to write article or tutorial on various IT topics. I have a YouTube channel where many types of tutorials based on Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel etc. are published: Tutorials4u Help.
Download a file from the URL in PHP
In this post, I will try to explain to you how you can download any file by its URL with the help of PHP. You can do it in many ways but in this tutorial, I will explain to you a few tricks.
First Method
We will use file_get_contents() a built-in function of PHP. This function is similar to file() the only difference is file_get_contents() returns the file in a string. This function uses memory mapping techniques and it is a preferred way to read file content.
The function returns the read data or FALSE on failure.
The above function will save the file on the same path where you run the script of PHP. If you want to download the file in your desired location then you need to set some headers. That is why I write a function given below that you can use to save file form URL into your local system.
The usage of the above function is given below.
Second Method.
In this method, I will show you how you can download a file with the helo of CURL another built-in function of PHP. If you use the below function you can save the file directly into your system by giving your desired location.
The usage of the above function is given below.
You can use any above function to download the file into your system or into your server.