PHP Files
Creating or Opening a Local File
Problem
You want to open a local file to read data from it or write data to it.
Solution
Use fopen():
$fh = fopen('file.txt','r') or die("can't open file.txt: $php_errormsg");
Discussion
The first argument to fopen() is the file to open; the second argument is the mode in which to open the file. The mode specifies what operations can be performed on the file (reading and/or writing), where the file pointer is placed after the file is opened (at the beginning or end of the file), whether the file is truncated to zero length after opening, and whether the file is created if it doesn’t exist.
Table fopen() file modes
Mode Readable? Writable? File pointer Truncate? Create?
r Yes No Beginning No No
r+ Yes Yes Beginning No No
w No Yes Beginning Yes Yes
w+ Yes Yes Beginning Yes Yes
a No Yes End No Yes
a+ Yes Yes End No Yes
x No Yes Beginning No Yes
x+ Yes Yes Beginning No Yes
________________________________________________________
The x and x+ modes return false and generate a warning if the file already exists. On non-POSIX systems, such as Windows, you need to add a b to the mode when opening a binary file, or reads and writes get tripped up on NUL (ASCII 0) characters. For instance:
$fh = fopen('c:/images/logo.gif','rb');
Even though Unix systems handle binary files fine without the b in the mode, it’s a good idea to use it always. That way, your code is maximally portable and runs well on both Unix and Windows.
To operate on a file, pass the filehandle returned from fopen() to other I/O functions such as fgets(), fputs(), and fclose().
If the file given to fopen() doesn’t have a pathname, the file is opened in the directory of the running script (web context) or in the current directory (command-line context).
You can also tell fopen() to search for the file to open in the include_path specified in your php.ini file by passing true as a third argument. This example searches for file.inc in the include_path:
$fh = fopen('file.inc','r',true) or die("can't open file.inc: $php_errormsg");
No comments:
Post a Comment