PHP File Handling


File handling in PHP allows you to create, open, read, write, and delete files on the server. PHP provides several built-in functions to perform these operations, making it easier to manage files. Understanding file handling is crucial when working with files in a PHP application. This article covers common interview questions and answers related to file handling in PHP.


What is file handling in PHP?

Answer:
File handling in PHP refers to the process of interacting with files for tasks such as reading, writing, opening, closing, and deleting files. PHP offers built-in functions to manage files on the server.


How do you open a file in PHP?

Answer:
You can open a file in PHP using the fopen() function. It requires two parameters: the file name and the mode in which the file is to be opened.

Example:

$file = fopen("example.txt", "r"); // Opens file in read mode

Common file modes:

  • "r": Read-only.
  • "w": Write-only (erases the file or creates a new file).
  • "a": Append mode (adds data at the end of the file).
  • "r+": Read and write.

How do you read the contents of a file in PHP?

Answer:
You can read the contents of a file using the fread() or file_get_contents() functions.

  • fread(): Reads a specified number of bytes from an open file.
$file = fopen("example.txt", "r");
$content = fread($file, filesize("example.txt"));
echo $content;
fclose($file);
  • file_get_contents(): Reads the entire file content into a string.
$content = file_get_contents("example.txt");
echo $content;

What is the difference between fread() and file_get_contents()?

Answer:

  • fread(): Requires a file pointer from fopen() and reads a specific number of bytes from the file.
  • file_get_contents(): Reads the entire file content directly into a string without needing to open the file explicitly. It’s simpler and more efficient when reading the whole file.

How do you write data to a file in PHP?

Answer:
You can write data to a file using the fwrite() or file_put_contents() functions.

  • fwrite(): Writes data to an open file.
$file = fopen("example.txt", "w");
fwrite($file, "Hello, World!");
fclose($file);
  • file_put_contents(): Writes data directly to a file (overwrites the file if it exists).
file_put_contents("example.txt", "Hello, World!");

How do you append data to a file in PHP?

Answer:
To append data to a file, open the file in append mode ("a") using fopen() or use the FILE_APPEND flag with file_put_contents().

  • Using fopen() and fwrite():
$file = fopen("example.txt", "a");
fwrite($file, "Appending this text.");
fclose($file);
  • Using file_put_contents():
file_put_contents("example.txt", "Appending this text.", FILE_APPEND);

How do you check if a file exists in PHP?

Answer:
You can check if a file exists using the file_exists() function.

if (file_exists("example.txt")) {
   echo "File exists.";
} else {
   echo "File does not exist.";
}

How do you delete a file in PHP?

Answer:
You can delete a file in PHP using the unlink() function.

if (file_exists("example.txt")) {
   unlink("example.txt"); // Deletes the file
   echo "File deleted.";
}

How do you close a file in PHP?

Answer:
You close an open file using the fclose() function after reading or writing operations to free up the resources.

$file = fopen("example.txt", "r");
fclose($file); // Closes the file

How do you read a file line by line in PHP?

Answer:
You can read a file line by line using the fgets() function in a loop.

$file = fopen("example.txt", "r");
while (!feof($file)) {
   $line = fgets($file);
   echo $line . "<br>";
}
fclose($file);

You can also use file() to read the entire file into an array, where each line becomes an array element.

$lines = file("example.txt");
foreach ($lines as $line) {
   echo $line . "<br>";
}

What is the purpose of feof() in file handling?

Answer:
The feof() function checks whether the end of a file has been reached. It returns true when the file pointer reaches the end of the file, and is typically used to terminate a while loop while reading a file.

while (!feof($file)) {
   // Read file contents until the end is reached
}

How do you get the size of a file in PHP?

Answer:
You can get the size of a file in bytes using the filesize() function.

$size = filesize("example.txt");
echo "File size: " . $size . " bytes";

How do you get file information such as file type, size, and last modified time in PHP?

Answer:
PHP provides functions to get various file attributes:

  • filesize(): Returns the file size in bytes.
  • filetype(): Returns the file type (e.g., file, directory).
  • filemtime(): Returns the last modified time of the file.

Example:

echo "Size: " . filesize("example.txt") . " bytes<br>";
echo "Type: " . filetype("example.txt") . "<br>";
echo "Last modified: " . date("F d Y H:i:s.", filemtime("example.txt")) . "<br>";

What are file permissions in PHP, and how do you change them?

Answer:
File permissions determine who can read, write, or execute a file. In PHP, you can change file permissions using the chmod() function.

Example of changing file permissions:

chmod("example.txt", 0644); // Sets read-write permissions for owner, read-only for others

Common permission values:

  • 0644: Owner can read/write; others can read.
  • 0755: Owner can read/write/execute; others can read/execute.

How do you check if a file is readable or writable in PHP?

Answer:
PHP provides is_readable() and is_writable() functions to check if a file has read or write permissions.

if (is_readable("example.txt")) {
   echo "File is readable.";
}
if (is_writable("example.txt")) {
   echo "File is writable.";
}

How do you handle errors while working with files in PHP?

Answer:
File handling functions like fopen() return false on failure. You should check the result of file operations and handle errors accordingly.

Example of handling errors:

$file = fopen("example.txt", "r");
if ($file === false) {
   die("Error: Unable to open the file.");
} else {
   // Process the file
   fclose($file);
}

What is the difference between fopen() and file_get_contents()?

Answer:

  • fopen(): Opens a file for reading or writing. It requires specifying the mode and provides more control over how the file is accessed.
  • file_get_contents(): Reads the entire content of a file into a string. It is simpler to use when you need to read the whole file at once but doesn’t offer control over how the file is opened.

How do you lock a file for reading or writing in PHP?

Answer:
You can lock a file using the flock() function to prevent multiple processes from writing to or reading the same file simultaneously. This helps avoid file corruption in concurrent environments.

Example of file locking:

$file = fopen("example.txt", "w");
if (flock($file, LOCK_EX)) { // Acquire an exclusive lock
   fwrite($file, "Writing with file lock.");
   flock($file, LOCK_UN); // Release the lock
} else {
   echo "Could not lock the file.";
}
fclose($file);

How do you upload a file using an HTML form and PHP?

Answer:
To upload a file in PHP, you need to set the form's enctype attribute to multipart/form-data, and handle the file using the $_FILES array.

Example HTML form:

<form action="upload.php" method="POST" enctype="multipart/form-data">
	<input type="file" name="fileToUpload">
	<input type="submit" value="Upload">
</form>

Example PHP code to handle the file upload:

if (isset($_FILES['fileToUpload'])) {
   $fileName = $_FILES['fileToUpload']['name'];
   $fileTmp = $_FILES['fileToUpload']['tmp_name'];
   $uploadDir = "uploads/";
   if (move_uploaded_file($fileTmp, $uploadDir . $fileName)) {
      echo "File uploaded successfully.";
   } else {
      echo "Failed to upload file.";
   }
}

How do you read and write CSV files in PHP?

Answer:
You can read and write CSV files using the fgetcsv() and fputcsv() functions.

  • Reading a CSV file:
$file = fopen("example.csv", "r");
while (($data = fgetcsv($file)) !== false) {
   print_r($data); // Outputs each row of the CSV
}
fclose($file);
  • Writing to a CSV file:
$file = fopen("example.csv", "w");
$data = ["Name", "Email", "Age"];
fputcsv($file, $data); // Writes a row to the CSV file
fclose($file);
Ads