Simple File Upload Script in PHP

Theory of Computation
In this tutorial, you will learn a simple script to upload a file on a remote server using a simple HTML form and store it in a directory. It is easy to upload a file to the server using PHP. This can be used to upload any type of file, like PDF, doc, image, video, zip files and other file types. We can also strict by specifying file type, set the limited file size and much more.
To create a File Uploader, first create a form and add a file type input field. The file type input shows the "Browse" button on the web page. If a form contains any file type input field, then we want to make sure to add a form attribute 'encrypt' with a value 'multipart/form-data'. The encrypt attribute specifies the content-type to be uploaded.
First, make sure that PHP is configured to allow the file upload. For this, open the 'php.ini' file and look for 
'file_uploads' directive and set it on.
file_uploads = On
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<div class="form-group">
	<label class="col-md-3 control-label">Upload a file (PDF, DOC, DOCX)</label>
	<div class="col-md-6">
	<input type="file" name="attachment" class="form-control-file" />
	</div>
</div>
<div class="form-group">
	<div class="col-md-9 col-md-offset-3">
	<button type="submit" class="btn btn-primary">Submit</button>
	</div>
</div>
</form>
PHP has a global array $_FILES, to handle the file upload. This array returns the following data of the uploaded files. Suppose the name of the input field to upload file is 'attachment', then we will get the following array after uploading the file -
$_FILES['attachment']['name']

$_FILES['attachment']['type']

$_FILES['attachment']['size']

$_FILES['attachment']['tmp_name']

$_FILES['attachment']['error']
When a file is uploaded, it first saves in a temporary directory on the server. In the given code, the is_uploaded_file() function is used to check the file whether it is successfully uploaded or not.
<?php 

// check the file is uploaded or not
if (is_uploaded_file($_FILES['attachment']['tmp_name'])) {    
        $errors= array();

	// Determine the file location
	$newname = dirname(__FILE__) . '/' .basename($_FILES['attachment']['name']);
}
?>
Now, we want to check the size of the uploaded file. If the file is larger than 2MB, an error message is displayed. The other file extension raises an error message.
if($_FILES['attachment']['size'] > 2097152) {
         $errors[]='File size must be excately 2 MB';
}

The code below only allows the users to upload PDF, DOC, DOCX files. 
// Check Allowed File Types
	$file_ext=strtolower(end(explode('.',$_FILES['attachment']['name'])));
	$extensions= array("pdf","doc","docx");
	if(in_array($file_ext,$extensions)=== false){
		$errors[]="File extension not allowed, please choose a PDF, DOC, DOCX file.";
}
PHP predefined function move_uploaded_file() is used to move the uploaded file from the temporary location to a specified location.
// Move the file from temporary location to specified location
	if (!(move_uploaded_file($_FILES['attachment']['tmp_name'], $newname))) {
		print_r($errors);
	} else {
		echo "<p>The file saved as: {$newname}</p>\n";
	}
Here, we have merged the above code and got the full script to upload a file.
<html>
  <head>
   <title>Simple File Upload Script in PHP</title>
   <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
  <div class="container">
  <?php 

	// check the file is uploaded or not
	if (is_uploaded_file($_FILES['attachment']['tmp_name'])) {   
	
		// Determine the file location
		$newname = dirname(__FILE__) . '/' .basename($_FILES['attachment']['name']);
	
		if($_FILES['attachment']['size'] > 2097152) {
			$errors[]='File size must be excately 2 MB';
		}
		
		// Check Allowed File Types
		$file_ext=strtolower(end(explode('.',$_FILES['attachment']['name'])));
		$extensions= array("pdf","doc","docx");
		if(in_array($file_ext,$extensions)=== false){
			$errors[]="File extension not allowed, please choose a PDF, DOC, DOCX file.";
		}
		
		if(empty($errors)==true){
			// Move the file from temporary location to determined location
			if (!(move_uploaded_file($_FILES['attachment']['tmp_name'], $newname))) {
				echo "<p>ERROR:  A problem occurred during file upload!</p>\n";
			} else {
				echo "<p>The file has been saved as: {$newname}</p>\n";
			}
		}
		else{
			print_r($errors);
		}
  }
 ?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<div class="form-group">
	<label class="col-md-3 control-label">Upload a file (PDF, DOC, DOCX)</label>
	<div class="col-md-6">
	<input type="file" name="attachment" class="form-control-file" />
	</div>
</div>
<div class="form-group">
	<div class="col-md-9 col-md-offset-3">
	<button type="submit" class="btn btn-primary">Submit</button>