Zend PHP 7 Certification – Input/Output – Files

This post covers the Files section of the Input/Output chapter when studying for the Zend PHP 7 Certification.

PHP has several functions for creating, reading, uploading, and editing files.

The two main types of functions that PHP use are listed below.

  • f* – Functions that work with a file resource. For example, fopen().
  • file* – Functions that work with a filename. For example, file_get_contents().

The fopen() function opens a file or a URL. It takes two parameters.

  • Filename – the filename itself as a string
  • Mode

The modes that can be used with the function can be seen below.

  • r – Open for reading only; place the file pointer at the beginning of the file.
  • r+ – Open for reading and writing; place the file pointer at the beginning of the file.
  • w – Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
  • w+ – Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
<?php
$handle = fopen("/home/user/file.txt", "r");
$handle = fopen("/home/user/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");

It should be noted that using fopen() in w mode will not update the modification time of a file like you may expect.

The fread() function takes two parameters – handle and length. fread() reads up to length bytes from the file pointer referenced by handle. The file reading stops as soon if conditions are met such as the following.

  • EOF (end of file) is reached.
  • Length bytes have been read.
<?php
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

The fclose() function closes an open file pointer. It’s good practice to close all files after you have finished with them.

<?php

$handle = fopen('somefile.txt', 'r');

fclose($handle);

The file_get_contents() function reads an entire file into a string. It can take up to 5 parameters.

  • Filename – The name of the file
  • Use include path – The FILE_USE_INCLUDE_PATH constant can be used to trigger include path search.
  • Context – A valid context resource
  • Offset – The offset where the reading will start
  • Maxlength – Maximum length of data read.
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;

To read certain sections of files, pass in the offset as the fourth parameter starting from 0. Use NULL for the second and third parameters if you do not wish to change them.

<?php
// Read 14 characters starting from the 21st character
$section = file_get_contents('people.txt', NULL, NULL, 20, 14);
var_dump($section);

The file_get_contents() function is similar to file() function, except that file_get_contents() returns the contents as a string and returns false on failure. file() reads an entire file into an array.

As oh PHP version 7.1, support for negative offsets has been added for this function.

The file_put_contents() function writes a string to a file.

Identically to calling fopen(), fwrite() and fclose() successively to write data to a file. If filename does not exist, the file is created. Otherwise, the existing file is overwritten, unless the FILE_APPEND flag is set. There are three parameters that are used in the function.

  • Filename – The file name
  • Data – The contents of the file to add to the file
  • Flag – Flags such as FILE_APPEND append the data to the file rather than overwriting it.
<?php
$file = 'people.txt';
// The new person to add to the file
$person = "John Smith\n";
// Write the contents to the file, 
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);

Note: This article is based on PHP version 7.1.