[go: up one dir, main page]

0% found this document useful (0 votes)
42 views10 pages

UPLOADING and Downloading A FILE

Uploaded by

jaindisha731
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views10 pages

UPLOADING and Downloading A FILE

Uploaded by

jaindisha731
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

UPLOADING A FILE:

With PHP, it is easy to upload files to the server.

Configure The "php.ini" File


First, ensure that PHP is configured to allow file uploads.

In your "php.ini" file, search for the file_uploads directive, and set it to On:

file_uploads = On

Create The HTML Form


Next, create an HTML form that allow users to choose the image file they want
to upload:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-


data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

Some rules to follow for the HTML form above:

 Make sure that the form uses method="post"


 The form also needs the following attribute: enctype="multipart/form-
data". It specifies which content-type to use when submitting the form

Without the requirements above, the file upload will not work.
Other things to notice:

 The type="file" attribute of the <input> tag shows the input field as a file-
select control, with a "Browse" button next to the input control

The form above sends data to a file called "upload.php", which we will create
next.

Create The Upload File PHP Script


The "upload.php" file contains the code for uploading a file:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]
["name"]);
$uploadOk = 1;
$imageFileType
= strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>

PHP script explained:

 $target_dir = "uploads/" - specifies the directory where the file is going to


be placed
 $target_file specifies the path of the file to be uploaded
 $uploadOk=1 is not used yet (will be used later)
 $imageFileType holds the file extension of the file (in lower case)
 Next, check if the image file is an actual image or a fake image
Check if File Already Exists
Now we can add some restrictions.

First, we will check if the file already exists in the "uploads" folder. If it does, an
error message is displayed, and $uploadOk is set to 0:

// Check if file already exists


if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}

Limit File Size


The file input field in our HTML form above is named "fileToUpload".

Now, we want to check the size of the file. If the file is larger than 500KB, an
error message is displayed, and $uploadOk is set to 0:

// Check file size


if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}

DOWNLOADING THE FILE:

Generally, no PHP script is required to download a file with the


extensions exe and zip. If the file location of this type of file is set in
the href attribute of the anchor element, then the file automatically downloads
when the user clicks on the download link. Some files, such
as image files, PDF files, text files, CSV files, etc., do not download
automatically, and instead, open in the browser when the user clicks on the
download link. These files can be downloaded forcibly in PHP using the
readfile() function that does not download automatically. This tutorial shows
you how to forcibly download any file using PHP script.
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
0 seconds of 7 minutes, 34 secondsVolume 0%

<html>
<head>
<title>Download Files</title>
</head>
<body>
<p><a href="abc.txt">Download TEXT file</a></p>
<p><a href="horizon.zip">Download ZIP file</a></p>
<p><a href="lecture.pdf">Download PDF file</a></p>
<p><a href="rose.jpg">Download JPG file</a></p>
</body>
</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
<html>
<head>
<title>Download Files</title>
</head>
<body>
<p><a href="download.php?path=abc.txt">Download TEXT file</a></p>
<p><a href="download.php?path=horizon.zip">Download ZIP file</a></p>
<p><a href="download.php?path=lecture.pdf">Download PDF file</a></p>
<p><a href="download.php?path=rose.jpg">Download JPG file</a></p>
</body>
</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
<?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');

//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."
?>
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
<html>
<head>
<title>Download Files</title>
</head>
<body>
<p><a href="download.php?path=downloads/lecture.pdf">Download PDF file</a></p>
<p><a href="download2.php?path=downloads/rose.jpg">Download JPG file</a></p>
</body>
</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
<?php
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."

?>
Output
After the download link of the PDF file is clicked, the following output will
appear.

You might also like