Reading and writing files in PHP is quite an essential part being able to write consise and powerful web applications. This article looks into the different methods of reading and writing files in PHP.
Reading files
PHP has many methods of reading byte streams and text into variables or outputting them to the user.
fread
The
fread
method reads the contents of a file
and returns them.
The fread
function is very similar to the C method that performs the same task, it even
takes the same read write parameters which are described after.
The core of the fread
method of opening files is that the file is opened, read and then closed. This is
achieved with fopen
, fread
and fclose
.
Using these three different methods is a rather old-fashioned but has it's advantages.
Open with:
fopen
|
Read with:
fread
Write with: fwrite
|
Close with:
fclose
|
The following code sample demonstrates these three methods for reading a file called myFile.txt:
<?php $contents = "" $filename = "myFile.txt"; $max_bytes = filesize($filename); $params = "r"; $handle = fopen($filename, $params); $contents = fread($handle); fclose($handle); ?>
The $params
variable contains a string "r"
because the file is being opened for read access only. The following
table displays all parameters available:
Mode | Description |
---|---|
r | Open an existing file for standard reading |
r+ | Opens a file for standard reading and writing |
w | Opens an existing file for standard writing |
w+ | Opens a file for standard reading and writing. Also if the file does not exist, it attempts to create it. |
a | Opens an existing file for writing with the file pointer at the end of the file. |
a+ | Opens a file for reading and writing with the file pointer at the end of the file. |
x | Create and open an existing file for writing. If the file exists already it fails and fopen returns false. |
x+ | Create and open a file for reading and writing. If the file exists already it fails and fopen returns false. |
With the w+ option, there was mention that the file system 'attempts' to create a file. The reason it can only attempt is because in the case where another process on the system is trying to remove the directory that the file was to be written to, the system would fail to generate a file. This is just one example of PHP failing to create a file.
readfile
While the fread
method works correctly and is fast enough for most tasks, the second method of doing this is
sufficiently faster,
according to some.
The readfile
method is very similar to the fread
method.
<?php $contents = "" $filename = "myFile.txt"; $contents = readfile($filename); ?>
file_get_contents
The third method of doing this is using the file_get_contents
method.
Just like the previous method, this method works on a file name given as a parameter.
<?php $contents = "" $filename = "myFile.txt"; $contents = file_get_contents($filename); ?>
Writing files
As with reading files, there are several options for writing files.
fwrite
The first option is the fwrite
C-style method. This is almost
identical to the way that fread
works:
Open with:
fopen
|
Read with:
fread
Write with: fwrite
|
Close with:
fclose
|
In an almost identical way to the way that fread
works, the following sample demonstrates
the fwrite
method of writing files:
<?php $contents = "" $filename = "myFile.txt"; $max_bytes = filesize($filename); $params = "w+"; $handle = fopen($filename, $params); fwrite($handle, "Hello "); fwrite($handle, "World!"); fclose($handle); ?>
Note that the $params
variable
has the value of 'w+' rather
than 'r' because to write it needs to have write capabilities. The w+ will create the file
if it does not already exist.
file_put_contents
The file_put_contents
method is identical to calling the previous method using fopen
, fwrite
and fclose
, except that it does
not permit the PHP script to write multiple times in the one file opening.
For the previously mentioned reason, this method is only ideal for quickly updating a file to save on time, but not for multiple writes, where the file being left open is a good thing.
<?php $contents = "Hello world!" $filename = "myFile.txt"; file_put_contents($filename, $contents); ?>
This example puts the contents of the variable $contents
into the file myFile.txt.