This post covers the Filesystem Functions section of the Input/Output chapter when studying for the Zend PHP 7 Certification.
PHP provides a number of filesystem functions that help read and write file data. Some of those functions can be seen and described in more details below.
The fopen()
function opens a file or a URL. It takes two parameters.
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 fwrite()
function writes the contents of string to the file stream pointed to by handle. Note that the file()
function reads the contents into an array.
$handle = fopen("/home/user/file.txt", "w+"); fwrite($handle, "some text");
If a third length
argument is given, writing will stop after length bytes have been written or the end of string is reached, whichever comes first.
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.
FILE_USE_INCLUDE_PATH
constant can be used to trigger include path search.<?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.
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);
The chmod()
function attempts to change the mode of the specified file to that given in mode.
chmod("/somedir/somefile", 0755); // octal; correct value of mode
The chown()
function attempts to change the owner of the file filename to user user.
// Set the user chown($path, $user_name);
The copy()
function copies a file.
< ?php $file = 'example.txt'; $newfile = 'example.txt.bak'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; }
The dirname()
function returns a parent directory’s path.
echo dirname("/some/directory/file.php"); // Outputs: /some/directory
Note that you can also use the __DIR__
constant to achieve the same result.
The feof()
function tests for end-of-file on a file pointer.
$fp = fopen('test.html','r'); if ($fp) { while(!feof($fp)) { // Do something } }
The file_exists()
function checks whether a file or directory exists.
$filename = '/path/to/foo.txt'; if (file_exists($filename)) { echo "The file $filename exists"; } else { echo "The file $filename does not exist"; }
The glob()
function searches for all the pathnames matching pattern and returns an array.
<?php foreach (glob("*.txt") as $filename) { echo "$filename size " . filesize($filename) . "\n"; }
The is_writable()
function returns TRUE if the filename exists and is writable.
<?php $filename = 'test.txt'; if (is_writable($filename)) { echo 'The file is writable'; } else { echo 'The file is not writable'; }
The pathinfo()
function returns information about path: either an associative array or a string, depending on options.
<?php $path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); echo $path_parts['dirname'], "\n"; echo $path_parts['basename'], "\n"; echo $path_parts['extension'], "\n"; echo $path_parts['filename'], "\n"; // since PHP 5.2.0
The rewind()
function sets the file position indicator for handle to the beginning of the file stream.
$handle = fopen('output.txt', 'r+'); fwrite($handle, 'Really long sentence.'); rewind($handle); fwrite($handle, 'Foo'); rewind($handle); echo fread($handle, filesize('output.txt')); fclose($handle); // Outputs: Foolly long sentence
The unlink()
function deletes a file.
<?php $fh = fopen('test.html', 'a'); fwrite($fh, '<h1>Hello world!</h1>'); fclose($fh); unlink('test.html');
The umask()
function sets PHP’s umask to mask & 0777 and returns the old umask.
<?php $old = umask(0); chmod("/path/some_dir/some_file.txt", 0755); umask($old); // Checking if ($old != umask()) { die('An error occurred while changing back the umask'); }
Note: This article is based on PHP version 7.1.