November 2002
Intermediate to advanced
640 pages
16h 33m
English
You want a lightweight way to store information between requests.
Use a text file with advisory locking to prevent conflicts. You can
store data in the text file in any useful format (CSV,
pipe-delimited, etc.) One convenient way is to put all the data you
want to store in one variable (a big associative array) and then
store the output of calling serialize( )
on the variable:
$data_file = '/tmp/data';
// open the file for reading and writing
$fh = fopen($data_file,'a+') or die($php_errormsg);
rewind($fh) or die($php_errormsg);
// get an exclusive lock on the file
flock($fh,LOCK_EX) or die($php_errormsg);
// read in and unserialize the data
$serialized_data = fread($fh,filesize($data_file)) or die($php_errormsg);
$data = unserialize($serialized_data);
/*
* do whatever you need to with $data ...
*/
// reserialize the data
$serialized_data = serialize($data);
// clear out the file
rewind($fh) or die($php_errormsg);
ftruncate($fp,0) or die($php_errormsg);
// write the data back to the file and release the lock
if (-1 == (fwrite($fh,$serialized_data))) { die($php_errormsg); }
fflush($fh) or die($php_errormsg);
flock($fh,LOCK_UN) or die($php_errormsg);
fclose($fh) or die($php_errormsg);Storing your data in a text file doesn’t require any additional database software to be installed, but that’s pretty much its only advantage. Its main disadvantages are clumsiness and inefficiency. At the beginning of a request, you’ve got to ...
Read now
Unlock full access